单链表完整C语言纯代码.docx
- 文档编号:275049
- 上传时间:2022-10-08
- 格式:DOCX
- 页数:7
- 大小:15.47KB
单链表完整C语言纯代码.docx
《单链表完整C语言纯代码.docx》由会员分享,可在线阅读,更多相关《单链表完整C语言纯代码.docx(7页珍藏版)》请在冰豆网上搜索。
单链表完整C语言纯代码
单链表完整C语言纯代码
单链表
●带头结点
#include
#include
/*
带头结点的单链表的操作
在该链表中,数据元素是int,
我们让头结点的数据域存储链表的实际长度
*/
/*链表节点的类型定义*/
structnode
{
intdata;
structnode*next;
};
/*
链表的初始化函数
在该函数中要分配头结点存储空间
让头指针指向头结点,
因此要修改头指针的值,
所以传递头指针的地址进来
*/
voidinit(structnode**h)
{
structnode*s;
s=(structnode*)malloc(sizeof(structnode));
if(s==NULL)return;
/*
头结点的数据域存储链表的长度
*/
s->data=0;
s->next=NULL;
/*让头指针指向头结点*/
*h=s;
}
/*
创建链表,仍然按照逆序创建,
从后往前输入元素的值,
然后把新结点插入到表头
*/
voidcreateLink(structnode*h)
{
structnode*s;
intn;
while
(1)
{
scanf("%d",&n);
/*根据实际情况判断链表的元素
输入结束
还有一种情况就是找不到合适的
作为结束标记的值
先让用户输入元素个数,
然后固定字数循环*/
if(n==-1)break;
/*
创建新结点
*/
s=(structnode*)malloc(sizeof(structnode));
s->data=n;
s->next=h->next;
/*
新结点放入链表的表头
让头结点的NEXT指向新结点
*/
h->next=s;
(h->data)++;
}
}
/*
遍历整个链表
*/
voidbianliLink(structnode*h)
{
intk;
structnode*p;
/*
P指向第一个结点
*/
p=h->next;
/*
如果定义了链表长度变量,
可以使用变量计数,
表示处理到链表的最后一个元素
如果不定义链表长度变量,
就用指针是否指向NULL,
判断是否处理到最后一个元素了
*/
/*1.链表长度变量计数*/
k=0;
while(k
{
/*对元素进行处理
这里可以根据需求变更*/
printf("%d",p->data);
/*准备处理下一个节点*/
p=p->next;
k++;
}
/*2.
用指针判断是否处理到链表的
最后一个元素了
*/
printf("\n");
p=h->next;
while(p!
=NULL)
{
/*处理当前节点*/
printf("%d",p->data);
/*准备处理下一个节点*/
p=p->next;
}
printf("\n");
}
/*
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));
if(s==NULL)return;
s->data=num;
/*
让指针p指向头结点
*/
p=h;
/*
让指针p移动到待插入位置的前驱结点
*/
while(k { p=p->next; k++; } s->next=p->next; p->next=s; h->data++; } /* index: 删除位置: index从1开始编号, 要删除index所指的位置的元素 */ voiddeleteLink(structnode*h,intindex) { structnode*p,*s; intk=1; if(index<=0||index>h->data)return; /* 让指针p指向头结点 */ p=h; /*让指针p移动到待删除节点的前驱*/ while(k { p=p->next; k++; } p->next=p->next->next; /*链表删除有可能让你返回删除的节点的值*/ h->data--; } /* 该方法返回链表的Index位置的元素 链表中的数据元素的类型与函数返回值 的类型要一致 */ intgetLink(structnode*h,intindex) { structnode*p; intk=1; p=h->next; while(k++ { p=p->next; } returnp->data; } main() { structnode*header; init(&header); createLink(header); bianliLink(header); insertLink(header,10,1); bianliLink(header); insertLink(header,11,header->data+1); bianliLink(header); insertLink(header,13,4); bianliLink(header); deleteLink(header,1); bianliLink(header); deleteLink(header,header->data); bianliLink(header); deleteLink(header,3); bianliLink(header); printf("%d,%d,%d\n",getLink(header,0),getLink(header,header->data),getLink(header,3)); }
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 单链表 完整 语言 代码
![提示](https://static.bdocx.com/images/bang_tan.gif)