车友信息管理系统详细编程内容摘要:

tf(it is not in the list!\n)。 return。 } struct node *SearchNode(struct node *head,Type data,int condition) //单链表的查找 { struct node *p=head。 //p从 head开始 int count=0。 if(head==NULL) //如果链表原来就为空 { printf(\nNO Records\n)。 //输出提示信息 return 0。 //返回空指针 } while(p) { if(equal(pdata,data,condition)==0) { printHead()。 printNode(pdata)。 printf(\n)。 count++。 } p=pnext。 } if(count==0) printf(it is not in the list!\n)。 return 0。 } struct node *InsertAfter(struct node *head,Type data) //尾部插入 { struct node *p,*p1。 p=(struct node*)malloc(size)。 //利用指针 p申请动态空间 pdata=data。 //数据域赋值 pnext=NULL。 //指针域直接赋值为空,因为它是新链最后的结点 if(head==NULL) //如果链表原来为空 { head=p。 //修改头指针 return head。 //返回头指针 } p1=head。 //链表原来非空,则指针 p1从头指针开始 while(p1next) //如果指针还没有指向链表的最后一个结点处 { p1=p1next。 //p1 顺着链向后移动 } //循环停止时, p1指向了链表的最后一个结点处 p1next=p。 //将新结点连在 p1 之后 return head。 //返回头指针 } struct node *InsertOrder(struct node *head,Type data,int condition) //有序插入法 { struct node *p,*p1,*p2。 p2=head。 p=(struct node*)malloc(size)。 //利用指针 p申请动态空间 pdata=data。 //数据域赋值 pnext=NULL。 //指针域直接赋值为空,以后根据插入位置再修改 if(head==NULL) //原链表为空时的插入 { head=p。 //新插入结点成为头结点 return head。 } //原链表不为空时的插入, larger是一个通用函数 while(p2amp。 amp。 larger(pdata ,p2data,condition)) //第一参数大于第二参数,返回真 { p1=p2。 //p1 是 p2的前趋结点,二者同时后移 p2=p2next。 } if(head==p2) //如果要在最前面插入,则要修改 head指针 head=p。 else //否则 p插在 p1的后面 p1next=p。 pnext=p2。 //p2 作为 p的后继结点,即 p插在 p1和 p2之间 return head。 //返回头指针 } struct node *CreateInsert() //按序插入法新建链表 { struct node *head。 Type data。 head=NULL。 printf(Input data end with 0:\n)。 readNode(amp。 data)。 //调用 readNode输入一个结点的数据域的值 while(!endWith(data)) //endWith(data)函数值为真时结束链表结点的生成 { head=InsertOrder(head,data,1)。 //直接 InserOrder函数插入新结点 readNode(amp。 data)。 //继续读入下一个结点的数据域的值 } return head。 //返回头指针 } struct node *Delete(struct node *head,Type data) //删除结点 { struct node *p=head,*q=NULL。 if(head==NULL) //如果原来链表为空,则给出提示信息并返回 { printf(\nNo Records\n)。 return head。 } while(pamp。 amp。 !equal(pdata,data,1)) //如果链表非空,则从第 1 个结点开始比较 { q=p。 //如果没有找到要删除的结点,则 p和 q同时向后移 p=pnext。 //动一个结点位置, q始终是 p的前趋 } if(p) //如果找到需要删除的结点 { if(q) //如果删除的不是第一个结点 qnext=pnext。 //修改的域,使 p的后继成为 q的后继 e。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。