链表操作.doc_第1页
链表操作.doc_第2页
链表操作.doc_第3页
链表操作.doc_第4页
链表操作.doc_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

#include#includetypedef struct List_Node int info; struct List_Node *next; node;/结点结构体/*/* 尾插法建立带头结点的单链表 */*/node* Creat_Node() node *head,*pre,*p; int x; head=(node*)malloc(sizeof(node); head-next=NULL; pre=head; printf(输入各结点的值,以0结束:); while(EOF!=(scanf(%d,&x)&x!=0) p=(node*)malloc(sizeof(node); p-info=x; p-next=pre-next; pre-next=p; pre=pre-next; return head;/*/* 头插法建立带头结点的单链表 */*/node* Build_Node() node *head,*p; int x; head=(node*)malloc(sizeof(node); head-next=NULL; printf(输入各结点的值,以0结束:); while(EOF!=(scanf(%d,&x)&x!=0) p=(node*)malloc(sizeof(node); p-info=x; p-next=head-next; head-next=p; return head;/*/* 打印单链表 */*/void Print_Node(node *head) node *p=head-next; printf(输出该链表:); while(p) printf(%-5d-,p-info); p=p-next; if(p=NULL) printf(nnn); #includeHead_Node.hint Count_Node(node *head) node *p=head-next; int num=0; while(p!=NULL) num+; p=p-next; return num;int main() node *head; head=Creat_Node(); Print_Node(head); printf(结点个数为:%dn,Count_Node(head); return 0;/#includehead_node.h/*/* 删除重复 */*/void Delete_Repeat_Node(node *head) node *p,*pre,*s; pre=head-next; p=pre-next; while(p) s=p-next; while(s&s-info!=p-info) s=s-next; if(s) pre-next=p-next; free(p); p=pre-next; else pre=p; p=p-next; int main() node *head; head=Creat_Node(); Print_Node(head); Delete_Repeat_Node(head); Print_Node(head); return 0;#includeHead_Node.h/*/* 在Y前插入X */*/void Before_y_Insert_x(node* head,int y,int x) node *pre,*p,*s; pre=head; p=pre-next; while(p&p-info!=y) pre=p; p=p-next; if(p=NULL) printf(error!%d不在该链表中n,y); else s=(node*)malloc(sizeof(node); s-info=x; s-next=p; pre-next=s; int main() node *head; int x,y; head=Creat_Node(); printf(在y前插入x,输入y,x:); scanf(%d%d,&y,&x); Print_Node(head); Before_y_Insert_x(head,y,x); Print_Node(head); return 0;/#includeHead_Node.h/*/* 判断链表是否有序 */*/int Is_Sort(node *head) node *p,*pre; int flag; pre=head-next; p=pre-next; flag=pre-infop-info?1:0; while(p) pre=p; p=p-next; if(p) if(flag!=pre-infop-info?1:0) return 0; return 1;int main() node *head; int flag; head=Creat_Node(); Print_Node(head); flag=Is_Sort(head); if(flag=1) printf(该链表有序!n); else printf(该链表无序!n); return 0;#includeHead_Node.h/*/* 链表反序 */*/void convert_Node(node *head) node *pre,*p=head-next; head-next=NULL; while(p) pre=p; p=p-next; pre-next=NULL; pre-next=head-next; head-next=pre; int main() node *head; head=Creat_Node(); Print_Node(head); convert_Node(head); Print_Node(head); return 0;/#includeHead_Node.h/*/* 将奇偶数按原相对顺序分开 */*/node *Divide_Node(node *head1) node *head2,*pre,*p,*s; p=head1-next; pre=head1; head2=(node*)malloc(sizeof(node); head2-next=NULL; s=head2; while(p) if(p-info%2) pre-next=p-next; p-next=s-next; s-next=p; s=p; p=pre-next; else pre=p; p=p-next; return head2;int main() node *head,*head2; head=Creat_Node(); Print_Node(head); head2=Divide_Node(head); printf(打印偶数链表n); Print_Node(head); printf(打印奇数链表n); Print_Node(head2); return 0;#includeHead_Node.h/*/*删除所有大于x而不大于Y的结点 */*/void Delete_X_y(node *head,int x,int y) node *pre=head,*p=head-next; if(x=y) printf(不符合条件!n); return ; while(p) if(p-infox&p-infonext=p-next; free(p); p=pre-next; else pre=p; p=p-next; int main() node *head; int x,y; head=Creat_Node(); printf(输出x,y的值:); scanf(%d%d,&x,&y); Print_Node(head); Delete_X_y(head,x,y); Print_Node(head); return 0;/#includeHead_Node.h/*/* 直接插入排序 */*/void Insert_Sort(node *head) node *p,*pre,*s,*r; p=head-next; head-next=NULL; while(p) pre=p-next; r=head; s=head-next; while(s&s-infoinfo) r=s; s=s-next; p-next=r-next; r-next=p; p=pre; int main() node *head; head=Creat_Node(); Print_Node(head); Insert_Sort(head); Print_Node(head); return 0;#includehead_node.hnode* merge_two_List(node *head1,node *head2) node *head,*s,*p,*r; p=head1-next; s=head2-next; head=(node*)malloc(sizeof(node); head-next=NULL; r=head-next; while(s&p) if(p-infoinfo) head1-next=p-next; p-next=NULL; r-next=p; r=r-next; p=head1-next; else head2-next=s-next; s-next=NULL; r-next=s; r=r-next; s=head2-next; while(s) head2-next=s-next; s-next=NULL; r-next=s; r=r-next; s=head2-next; while(p) head1-next=p-next; p-next=NULL;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论