大家好,又见面了,我是你们的朋友全栈君。
1.初始化
<span style="font-family:KaiTi_GB2312;font-size:18px;">//建立一个空的单链表
LinkList InitiateLinkList( )
{
LinkList head; //头指针
head = malloc(sizeof(node)); //动态构建一个节点,它是头结点
head ->next = NULL;
return head;
}</span>
2.求表长
//求单链表表head的长度
int LentghLinklist ( LinkList head )
{
Node * p = head; //p是工作指针,初始时p指向头结点
int cnt = 0; //计数器置初值
while(p->next != NULL) //判断是否为尾节点
{
p = p->next; //指针移动到下一个节点
cnt ++;
}
return cnt;
}
3.读表元素
//在单链表head中查找第i个元素节点,若找到,则返回指向该节点的指针,否则返回NULL
Node * GetLinklist(LinkList head,int i)
{
Node *p; //p是工作指针
p = head ->next; //初始时p指向头结点
int c = 1;
while ( (c<i) && (p != NULL) ) //当未到第i结点且未到尾节点时继续后移
{
p = p->next;
c++;
}
if ( i == c ) return p; //找到第i个节点
else return NULL; //i<1 或 i>n ,i值不合法,查找失败
}
4.定位
//求表head中第一个值等于x的结点的序号,若不存在这种结点,返回结果为0
int LocateLinklist( LinkList head , DataType x)
{
Node * p = head; //p是工作指针
p = p->next; //初始时p指向首结点
int i=0; //i代表结点的序号,这里置初值为0
while (p!= NULL && p->data !=x) //访问链表
{
i++;
p = p->next;
}
if (p!= NULL ) return i+1;
else return 0;
}
5.插入
//在表head的第i个数据元素结点之前插入一个以x为值的新结点
void InsertLinklist ( LinkList head , DataType x,int i )
{
Node *p , *q;
if ( i == 1) q = head;
else q = GetLinklist (head ,i-1); //找第i-1个数据元素结点
if (q == NULL ) //第i-1个结点不存在
exit ("找不到插入的位置");
else
{
p = malloc ( sizeof(Node));
p->data = x; //生成新结点
p->next = q->next; //新结点链域指向*q的后继结点
q->next = p; //修改*q的链域
}
}
6.删除
//删除表head的第i个结点
void DeleteLinklist (LinkList head,int i)
{
Node *p;
if(i==q) q=head;
else q=GetLinklist(head,i-1); //先找到待删除结点的直接前驱
if(q!=NULL && q->next != NULL) //若直接前驱存在且待删除结点存在
{
p=q->next; //p指向待删除结点
q->next=p->next; //移出待删结点
free(p); //释放已移出结点p的空间
}
else exit ("找不到要删除的结点"); //结点不存在
}
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/105719.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...