- 1、本文档共8页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
带头结点的单链表的创建
带头结点的单链表的创建、求表长、输出、插入、删除、查找、逆置
//说明在VC6.0中不能把本代码保存为.c进行编译,应保存为.cpp,原因可能是里边注释是c++的风格,在codeblocks中不存在这个问题#includestdio.h#includestdlib.h#define DataType int#define FLAG -1typedef struct Node{??? DataType data;??? struct Node *next;}Lnode,*LinkList;LinkList Creat_LinkList(){??? LinkList L;??? Lnode *s,*r;??? int x;??? printf(建立有表头结点的单链表,以%d作为创建链表完成的标志\n,FLAG);??? L=r=s=NULL;??? L=(Lnode *)malloc(sizeof(Lnode));??? if(!L)??? {??????? printf(表头结点开辟失败\n);??????? exit(-1);??? }??? L-next=NULL;??? scanf(%d,x);??? while(x!=FLAG)??? {??????? s=(Lnode *)malloc(sizeof(Lnode));??????? if(!s)??????? {??????????? printf(结点开辟失败\n);??????????? exit(-1);??????? }??????? s-data=x;??????? if(NULL==L-next)//第一个结点的处理??????? L-next=s;??????? else??????? r-next=s;??????? r=s;??????? scanf(%d,x);??? }??? if(r!=NULL)//对于非空表,最后结点的指针域放空指针??? r-next=NULL;??? return L;}/*有头结点的链表,求表长算法*/int Length_LinkList(LinkList L){Lnode *p;??? int j;??? p=L;??? j=0;??? while(p-next)??? {??????? p=p-next;??????? j++;??? }??? return j;}int Print_LinkList(LinkList L){??? printf(输出:\n);??? Lnode *s;??? s=L;??? while(s-next!=NULL)??? {??????? s=s-next;??????? printf(%3d,s-data);??? }??? printf(\n);??? return 0;}/*逆置算法思路:依次取原链表中每个结点,将其作为第一个结点插入到新的链表中去。指针p用来指向原表中当前结点,p为空时结束。*/void Reverse_LinkList(LinkList H)//单链表的逆置{??? Lnode *p,*q;??? p=H-next;//p指向第一个结点??? H-next=NULL;//将原链表置为空表??? while(p)??? {??????? q=p;??????? p=p-next;??????? q-next=H-next;//将当前节点插入到头结点后面??????? H-next=q;??? }??? return;}
/*按序号查找*/Lnode *Get_LinkList(LinkList L,int i){??? Lnode *p;??? int j=0;??? p=L;??? while(p-next!=NULLji)??? {??????? p=p-next;??????? j++;??? }??? if(j==i)??? return p;??? else??? return NULL;}/*按值查找*/Lnode *Locate_LinkList(LinkList L,DataType x){??? Lnode *p;??? p=L-next;??? while(p!=NULLp-data!=x)??? p=p-next;??? return p;}/*插入操作,分为:前插接点、后插结点.下面的算法实现在链表的第i个位置上插入一个数值
后插结点:设p指向单链表中某结点,s指向待插入值为x的新结点,将*s插入到*p之后,
您可能关注的文档
最近下载
- DL∕T 5168-2023表A.5 分部工程质量控制资料核查记录.pdf VIP
- 大班数学活动《8的分解组成》PPT课件.ppt
- 【一模】2025年广东省2025届高三高考模拟测试 (一) 数学试卷(含官方答案及解析 ).docx
- 13S201 室外消火栓及消防水鹤安装.docx VIP
- 主题班会课件-师恩难忘-学子感恩-致敬恩师主题班会.ppt
- GB50327-2001住宅装饰装修工程施工规范.docx
- World怎么在参考文献后面添加CrossRef.pdf VIP
- 江苏省房屋建筑和市政基础设施工程标准施工招标文件(适用于资格后审).doc VIP
- 八下英语U3词性变化.docx
- 《机械原理》期末考试试题及答案.docx
文档评论(0)