单链表完整C语言纯代码Word格式.docx
《单链表完整C语言纯代码Word格式.docx》由会员分享,可在线阅读,更多相关《单链表完整C语言纯代码Word格式.docx(7页珍藏版)》请在冰豆网上搜索。
![单链表完整C语言纯代码Word格式.docx](https://file1.bdocx.com/fileroot1/2022-10/8/a834c942-6ba2-46cd-bf37-8ab3de72e9cc/a834c942-6ba2-46cd-bf37-8ab3de72e9cc1.gif)
structnode*next;
};
链表的初始化函数
在该函数中要分配头结点存储空间
让头指针指向头结点,
因此要修改头指针的值,
所以传递头指针的地址进来
voidinit(structnode**h)
structnode*s;
s=(structnode*)malloc(sizeof(structnode));
if(s==NULL)return;
/*
头结点的数据域存储链表的长度
*/
s->
data=0;
next=NULL;
/*让头指针指向头结点*/
*h=s;
}
创建链表,仍然按照逆序创建,
从后往前输入元素的值,
然后把新结点插入到表头
voidcreateLink(structnode*h)
intn;
while
(1)
{
scanf("
%d"
&
n);
/*根据实际情况判断链表的元素
输入结束
还有一种情况就是找不到合适的
作为结束标记的值
先让用户输入元素个数,
然后固定字数循环*/
if(n==-1)break;
创建新结点
data=n;
next=h->
next;
新结点放入链表的表头
让头结点的NEXT指向新结点
h->
next=s;
(h->
data)++;
}
遍历整个链表
voidbianliLink(structnode*h)
intk;
structnode*p;
P指向第一个结点
p=h->
如果定义了链表长度变量,
可以使用变量计数,
表示处理到链表的最后一个元素
如果不定义链表长度变量,
就用指针是否指向NULL,
判断是否处理到最后一个元素了
/*1.链表长度变量计数*/
k=0;
while(k<
h->
data)
/*对元素进行处理
这里可以根据需求变更*/
printf("
%d"
p->
data);
/*准备处理下一个节点*/
p=p->
k++;
/*2.
用指针判断是否处理到链表的
最后一个元素了
printf("
\n"
);
while(p!
=NULL)
/*处理当前节点*/
p=p->
intnum:
要插入的结点元素的值
index:
插入位置:
index从1开始编号,
要在Index指定的位置插入数据
voidinsertLink(structnode*h,intnum,intindex)
structnode*p,*s;
intk=1;
/*插入位置无效,链表长度现在是10,在12(包含12)之后的位置插入元素,认为地址无效*/
if(index<
=0||index>
(h->
data+1))return;
s=(structnode*)malloc(sizeof(structnode));
data=num;
让指针p指向头结点
p=h;
让指针p移动到待插入位置的前驱结点
index)
p=p->
next=p->
p->
next=s;
data++;
删除位置:
要删除index所指的位置的元素
voiddeleteLink(structnode*h,intindex)
data)return;
/*让指针p移动到待删除节点的前驱*/
next=p->
next->
/*链表删除有可能让你返回删除的节点的值*/
data--;
该方法返回链表的Index位置的元素
链表中的数据元素的类型与函数返回值
的类型要一致
intgetLink(structnode*h,intindex)
p=h->
while(k++<
p=p->
returnp->
data;
main()
structnode*header;
init(&
header);
createLink(header);
bianliLink(header);
insertLink(header,10,1);
insertLink(header,11,header->
data+1);
insertLink(header,13,4);
deleteLink(header,1);
deleteLink(header,header->
deleteLink(header,3);
%d,%d,%d\n"
getLink(header,0),getLink(header,header->
data),getLink(header,3));