- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
一:链表
链表是一种物理存储单元上不连续的存储结构,数据元素之间是通过链表中的指针进行链接。链表是由一系列的节点(链表中每一个元素称为节点)组成,节点可以在运行时动态生成。每一个节点都包含两个部分:一个是存储数据的数据域,另一个是存储下一个节点地址的指针域。
一般链表在一些需要快速插入/删除,而不太关心或者不需要随机访问的情况下使用。
链表相对于数组:链表允许在任意位置插入或删除节点,但是链表不支持随机访问节点,只能从头节点逐个访问(遍历)每个节点。
链表分三种:单向链表、双向链表以及循环链表,分别如下图所示:
单向链表:
单向链表是链表中最简单的链表,它包含两个域:一个数据域和一个指针域,它只可以向一个方向遍历。
双向链表:
双向链表中每个节点中有数据域和两个指针域,前面的指针指向前一个节点,后一个指针指向下一个节点。
循环链表:
循环链表中,首节点和末节点被连接在一起,它也可以被视为“无头无尾”。这种链表比较利于数据存储缓存。
以下是创建链表以及插入删除查找的demo
#include <stdio.h>
#include <malloc.h>
#include <string.h>
#define N 10
typedef struct node
{
char name[20];
struct node *link;
}stud;
stud * create(int n) //创建有n个节点的链表,返回链表头结点
{
stud *p,*h,*s;
if((h=(stud *)malloc(sizeof(stud)))==NULL)//创建头节点
{
printf(Memory allocation fails!);
exit(0);
}
strcpy( h->name, “head” );
h->link=NULL;
p=h;
for(int i=0;i<n-1;i++)
{
if((s= (stud *) malloc(sizeof(stud)))==NULL)//依次创建每一个节点
{
printf(Memory allocation fails!);
exit(0);
}
p->link=s;
printf(Please input %d person name:, i+1);
scanf(%s,s->name);
s->link=NULL;
p=s;
}
return(h);
}
stud* search(stud *h, char *x) //查找,h是链表头结点,x是要查的字符串
{
stud *p = h;
while(p!=NULL) //最后一个节点的link
{
if(strcmp(p->name, x)==0)
return(p);
else
p=p->link; //p指向下一个节点
}
if(p==NULL)
printf(There is no such a student!);
return p;
}
stud* Delete(stud *h, char *x) //删除某个节点,返回链表头结点 //x是要删除的数据
{
if( h == NULL)
return NULL;
stud * p1, *p2;
p1=h;
p2=h-link;
if (strcmp( p1-name, x ) == 0 )//头结点特殊处理
{
h = h-link;//头指针指向第二个元素即可
free(p1);//释放头结点
return h;
}
while(p2!=NULL)//p2 代表当前要比较的节点,p1代表当前节点的前一个节点
{
if(strcmp(p2-name, x)==0)
{
p1-link = p2-link;
free(p2);
return h;
}
else
{
p1=p2;
p2=p2-link;//一起往后移
}
}
rerun h;
}
void insert(stud *p) //在p节点后插入一个节点
{
char stuname[20];
stud *s;
if((s= (stud *) malloc(sizeof(stud)))==NULL)
{
printf(Memory allocation fails!);
exit(0);
}
printf(Please input name” );
scanf(%s,stuname);
strcpy(s->name,stu
您可能关注的文档
- 危险废物规范化管理工作要求课件(省厅刘理祥)2015.ppt
- 卸料平台 悬挑方案.doc
- 危险源辨识风险评价表(例).doc
- 卵巢畸胎瘤 病例.pptx
- 厂商广告的有效配合.ppt
- 厂房办公设计说明.doc
- 厂用电源切换措施.doc
- 厄运下的英雄 苦难中的凡人钮萍萍.ppt
- 历史上翻译高潮的.ppt
- 历史 沪剧.ppt
- 2025至2030离子交换化合物行业产业运行态势及投资规划深度研究报告.docx
- 2025至2030中国透湿防水膜行业发展趋势分析与未来投资战略咨询研究报告.docx
- 2025至2030全球及中国酒店收益优化解决方案行业产业运行态势及投资规划深度研究报告.docx
- 2025至2030蘑菇养殖行业项目调研及市场前景预测评估报告.docx
- 2025至2030牛奶行业市场深度调研及发展规划及有效策略与实施路径评估报告.docx
- 2025至2030功能性酶混合物行业发展趋势分析与未来投资战略咨询研究报告.docx
- 2025至2030磷化铝行业发展趋势分析与未来投资战略咨询研究报告.docx
- 2025至2030全球及中国汽车限位开关行业产业运行态势及投资规划深度研究报告.docx
- 2025至2030国内酵素饮料行业产业运行态势及投资规划深度研究报告.docx
- 2025至2030中国适体行业市场占有率及投资前景评估规划报告.docx
文档评论(0)