网站大量收购独家精品文档,联系QQ:2885784924

带头结点的单链表的创建.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
带头结点的单链表的创建

带头结点的单链表的创建、求表长、输出、插入、删除、查找、逆置 //说明在VC6.0中不能把本代码保存为.c进行编译,应保存为.cpp,原因可能是里边注释是c++的风格,在codeblocks中不存在这个问题 #includestdio.h #includestdlib.h #define DataType int #define FLAG -1 typedef 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之后,

文档评论(0)

xcs88858 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8130065136000003

1亿VIP精品文档

相关文档