单链表完整C语言纯代码.doc
下载提示(请认真阅读)1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
2.下载的文档,不会出现我们的网址水印。
3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
文档包含非法信息?点此举报后获取现金奖励!
下载文档到电脑,查找使用更方便
24
积分
还剩页未读,继续阅读
关 键 词:单链表
完整
语言
代码
资源描述:
。
单链表
l 带头结点
#include #include /*
带头结点的单链表的操作
在该链表中,数据元素是int,
我们让头结点的数据域存储链表的实际长度
*/
/*链表节点的类型定义*/
struct node
{
int data;
struct node *next;
};
/*
链表的初始化函数
在该函数中要分配头结点存储空间
让头指针指向头结点,
因此要修改头指针的值,
所以传递头指针的地址进来
*/
void init(struct node **h)
{
struct node *s;
s = (struct node *)malloc(sizeof(struct node));
if(s==NULL) return;
/*
头结点的数据域存储链表的长度
*/
s->data=0;
s->next=NULL;
/*让头指针指向头结点*/
*h = s;
}
/*
创建链表,仍然按照逆序创建,
从后往前输入元素的值,
然后把新结点插入到表头
*/
void createLink(struct node *h)
{
struct node *s;
int n;
while(1)
{
scanf("%d",&n);
/*根据实际情况判断链表的元素
输入结束
还有一种情况就是找不到合适的
作为结束标记的值
先让用户输入元素个数,
然后固定字数循环*/
if(n==-1) break;
/*
创建新结点
*/
s = (struct node *)malloc(sizeof(struct node));
s->data = n;
s->next = h->next;
/*
新结点放入链表的表头
让头结点的NEXT指向新结点
*/
h->next = s;
(h->data)++;
}
}
/*
遍历整个链表
*/
void bianliLink(struct node *h)
{
int k;
struct node *p;
/*
P指向第一个结点
*/
p=h->next;
/*
如果定义了链表长度变量,
可以使用变量计数,
表示处理到链表的最后一个元素
如果不定义链表长度变量,
就用指针是否指向NULL,
判断是否处理到最后一个元素了
*/
/*1.链表长度变量计数*/
k=0;
while(kdata)
{
/*对元素进行处理
这里可以根据需求变更*/
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");
}
/*
int num:要插入的结点元素的值
index: 插入位置:
index从1开始编号,
要在Index指定的位置插入数据
*/
void insertLink(struct node *h,int num,int index)
{
struct node *p,*s;
int k=1;
/*插入位置无效,链表长度现在是10,在12(包含12)之后的位置插入元素,认为地址无效*/
if(index<=0||index>(h->data+1)) return;
s = (struct node*)malloc(sizeof(struct node));
if(s==NULL) return;
s->data=num;
/*
让指针p指向头结点
*/
p = h;
/*
让指针p移动到待插入位置的前驱结点
*/
while(knext;
k++;
}
s->next=p->next;
p->next=s;
h->data++;
}
/*
index: 删除位置:
index从1开始编号,
要删除index所指的位置的元素
*/
void deleteLink(struct node *h,int index)
{
struct node *p,*s;
int k=1;
if(index<=0||index>h->data) return;
/*
让指针p指向头结点
*/
p = h;
/*让指针p移动到待删除节点的前驱*/
while(knext;
k++;
}
p->next = p->next->next;
/*链表删除有可能让你返回删除的节点的值*/
h->data--;
}
/*
该方法返回链表的Index位置的元素
链表中的数据元素的类型与函数返回值
的类型要一致
*/
int getLink(struct node *h,int index)
{
struct node *p;
int k=1;
p = h->next;
while(k++next;
}
return p->data;
}
main()
{
struct node *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));
}
Welcome !!!
欢迎您的下载,
资料仅供参考!
精选资料,欢迎下载
展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
人人文库网所有资源均是用户自行上传分享,仅供网友学习交流,未经上传用户书面授权,请勿作他用。
关于本文
本文标题:单链表完整C语言纯代码.doc
链接地址:https://www.renrendoc.com/p-25638112.html