邻接表的存储.doc_第1页
邻接表的存储.doc_第2页
邻接表的存储.doc_第3页
邻接表的存储.doc_第4页
邻接表的存储.doc_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

邻接表的存储#include#define n 4void main() int i,j;int sum=0;int v4;int Gnn=0,1,1,0,0,0,0,0,0,0,0,1,1,0,0,0;for(i=0;in;i+)for(j=0;jn;j+)printf(%d,Gnn);scanf(请输入第i个顶点%d,&i);for(j=0;jn;j+)sum+=Gij;vi=sum;printf(%d,vi);单链表逆转#include#includetypedef struct lnodeint data;struct lnode *next; linklist;void nizhuan(linklist *p) linklist *p,*p1,*p2,*p3;int temp;p1=p;if(!p-next)return;p2=p1-next;if(!p2-next)temp=p1-data;p1-data=p2-data;p2-data=temp;return;p3=p2-next;p1-next=NULL;while(p3-next)p2-next=p;p1=p2;p2=p3; p3=p3-next; p2-next=p1; p3-next=p2; p=p3; return p;void main() linklist *a,*p; a=creatlist(); head=a; printf(原来的数值:n); while(a-next!=NULL) printf(%d,a-data); a=a-next; printf(%d,a-data); printf(逆转的数值为:n);p=nihuan(head); while(p-next!=NULL) printf(%d,p-data); p=p-next; printf(%dn,p-data); 单链表的插入#include#includeTypedef struct lnode int data;struct lnode *next;linklist;linklist *creatlist()linklist *head,*p,*q;int x;head=(linklist*)malloc(sizeof( linklist) head-next=NULL;p=head;printf(请输入数值,以0为结束条件n);scanf(%d,&x);while(!x)q=(linklist*)malloc(sizeof(linklist); q-data=x;q-next=NULL;p-next=q;p=q;scanf(%d,&x);return head;void maobaopaixu(linklist *p)linklist *m,*n;int temp;for(m=p-next;m-next;m=m-next)for(n=p-next;n-next;n=n-next)if(n-datan-next-data)temp=n-data;n-data=n-next-data;n-next-data=temp;void main()linklist *head;head=creatlist();p=head;while(p!=NULL) printf(%d,p-data); p=p-next;Sortlist(head);p=head;while(p!=NULL) printf(%d,p-data); p=p-next;冒泡排序#include#define True 1#define False 0main()int a7=9,12,6,15,3,16,10;int i,j,temp;for(i=1;i=6;i+)int ok=True;for(j=0;jaj+1)ok=False;temp=aj;aj=aj+1;aj+1=temp;if(ok=True)break;for(i=0;i7;i+)printf(%4d,ai);折半查找#include #define listsize 100 typedef struct int datalistsize; int length; sqlist;/顺序表的类型 void createtsqlist(sqlist &L,int a,int n)/用数组创建顺序表 L.length=0; for(int i=0;in;i+) L.dataL.length+=ai; void findvalue(sqlist L,int x) /查找x是否在顺序表内 for(int i=0;iL.length;i+) if(L.datai=x) printf(%d是第%d个元素n,x,i+1);return; printf(%d不在顺序表内n,x); void search_bin(sqlist L,int x)/折半查找有序表 int low=1;int high=L.length;int mid; while(low=high) mid=(low+high)/2; if(x=L.datamid) printf(%d是第%d元素n,x,mid+1);return; else if(xL.datamid)high=mid-1; else low=mid+1; printf(%d不在顺序表内n,x); void main() int a10=1,23,45,34,67,87,9,13,7,11; int b10=1,2,3,4,5,6,9,14,19,23;/保证b中元素有序 sqlist L1,L2;/L2创建为有序表 createtsqlist(L1,a,10); findvalue(L1,45);/查找45是否在表内可以换成其他数 createtsqlist(L2,b,10); search_bin(L2,14);/查找14是否在表内可以换成其他数 建立链表#include #include /负责malloc函数typedef struct node int data; struct node *next;linklist/建立不带头结点的单链表 linklist *creatlist() linklist *head,*r,*s; int x; head=(linklist *)malloc(sizeof(linklist); r=head; printf(输入集合中的整数(以0标志结束):n); scanf(%d,&x); while(x!=0) s=(linklist *)malloc(sizeof(linklist); s-data=x; s-next=NULL; r-next=s; r=s; scanf(%d;&x); s=head; head=head-next; free(s) return head;单链表进行排序,把链表逆置思路:对单链表进行排序,我这里选择冒泡排序,选择对其关键字进行排序;而不选择交换结点。把链表逆序的话,基本思路就是使两结点之间的指向变反,也就是p1-p2变为p2-p1;把第一个结点的指针域设为NULL;最后使头结点指向尾结点;或者新建一个空链表,采用前插的办法。源代码:#include#includetypedef struct node int data; struct node *next;linklist;linklist *head=NULL; /head为头结点linklist* CreateList() /尾插法建单链表 int _data; linklist *pCurrent,*rear; /rear为尾指针,pCurrent为当前指针 head = (linklist*)malloc(sizeof(linklist); rear = head; scanf(%d,&_data); while (_data != -1) pCurrent = (linklist*)malloc(sizeof(linklist); pCurrent-data = _data; rear-next = pCurrent; rear= pCurrent; scanf(%d,&_data); rear-next = NULL; return head;void ShowList(linklist *p) while (p) printf(%d,p-data); p = p-next; printf(Endn);void BubbleSortList(linklist *p) /链表冒泡排序 linklist *_temp,*_node; int temp; for (temp = p-next;_temp-next;_temp = _temp-next) for (_node = p-next;_node-next;_node = _node -next) if (_node-data _node-next-data) temp = _node-data; _node-data = _node-next-data; _node-next-data = temp; void ReverseList(linklist *p) /逆转链表 linklist *p1,*p2,*p3; int _data; p1 = p-next; if (!p1-next) /链表中只有一个结点 return; p2 = p1-next; if (!p2-next) /链表中只有二个结点 _data = p1-data; p1-data = p2-data; p2-data = _data; return; p3 = p2-next ; /链表中有三个以上结点 p1-next = NULL; while (p3-next) p2-next = p1; p1 = p2; p2

温馨提示

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

评论

0/150

提交评论