ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:21.50KB ,
资源ID:26386878      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/26386878.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(数据结构例题.docx)为本站会员(b****9)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

数据结构例题.docx

1、数据结构例题第二章在线性表L中第i个数据元素之前插入数据元素x int sqinsert(v,pn,i,x) int v,*pn,i,x; int j; if (*pn0) printf(“表长错误n”); return(-1); if (i*pn+1) printf(“插入位置i不恰当n”); return (-1); for (j=*pn;j=i;j-) vj+1=vj; vi=x; (*pn)+; printf(“插入成功n”) return (0);将线性表L中第i个数据元素删除int sqdelete(v,pn,i)int v,*pn,i;int j; if (*pn0) print

2、f(“表长错误n”); return(-1); if (i*pn) printf(“删除位置i不恰当n”); return (-1); for (j=i;jdata=b; if (head=NULL) head=s; s-next=NULL; else if(head-data=a) s-next=head; head=s; elsep=head;while (p-data!=a)&(p-next!=NULL)q=p; p=p-next; if(p-data=a)q-next=s; s-next=p;elsep-next=s; s-next=NULL;return(head);NODE *de

3、llink(NODE *head,int a)NODE *p,*q; if (head=NULL) printf(“空链表n”); else if(head-data=a)p=head;head-next=head; elsep=head;while (p-data!=a)&(p-next!=NULL)q=p; p=p-next; if(p-data!=a)printf(“没有结点%dn”,a);elseq-next=p-next;free(p);栈的链式存储结构在C语言中可用下列类型定义实现:#define NULL 0struct nodeint data; struct node *ne

4、xt; typedef struct node NODE2. 入栈 NODE *pushlink NODE *top,int x)NODE *p;p=(NODE*)malloc(sizeof(NODE);p-data=x;p-next=top;top=p;return(top);3. 出栈NODE *poplink(NODE *top,int *py)NODE *p;if (top=NULL)printf(“下溢n”);else p=top; top=top-next;*py=p-data;free(p);return(top);下面我们给出有关队列的说明及实现队列运算的C函数: #defin

5、e M 100 char qM; int f,r;(1)置空队列(初始化队列) void setnull(int *front,int *rear)*front=-1; *rear=-1;(2)判空队列 int empty(int *front,int *rear) if (*front+1)=*rear) return(1); else return(0);(3)入队 int enqueue(char q,char x,int *front,int *rear)*rear=(*rear+1)%M; if (*rear=*front) printf(“上溢n”); return(-1); el

6、se q*rear=x; return(0); (4)出队 int dequeue(char q,char *y, int *front,int *rear) if (*front+1)=*rear)printf(“下溢n”);return(-1); else *front=(*front+1)%M;*y=q*front;return(0); 设有10个队列共享内存空间,下面是其中第i各队列的入队和出队操作。设有如下定义:#define N 11#define NULL 0struct nodechar data; struct node *next; typedef struct node

7、NODE;NODE *frontN,*rearN;第i个队列中入队操作,x为入队元素。void addqulink(int i,char x)NODE *q;q=(NODE *)malloc(sizeof(NODE);q-data=x;q-next=NULL;if(fronti=NULL)fronti=q;reari=q;elsereari-next=q;reari=q;第i各队列的出队操作。void delqulink(int i)NODE *q;if(fronti=NULL)printf(“队列空n”);elseq=fronti;fronti=q-next;printf(“%c”,q-da

8、ta);free(q);在双向循环链表中,在数据域值为x的数据元素之之后插入数据域值为y的数据元素。void indouble(NODE *head,char x,char y)NODE *p,*q;p=head-rlink;while(p!=head)&(p-data!=x)p=p-rlink;if(p=head) printf(“没找到插入位置xn”);elseq=(NODE *)malloc(sizeof(NODE);q-data=y;q-rlink=p-rlink;q-llink=p;p-rlink=q;q-rlink-llink=q;假设有7个人,编号从1到7,他们手中的密码分别是3

9、,1,7,2,4,8,4,最初的m=2,通过报数,这7个人离开桌旁的顺序应该是:2,3,5,4,7,6,1。一、 用顺序存储结构实现#define LIST_MAX_LENGTH 7#define n LIST_MAX_LENGTHtypedef int EntryType; /将EntryType定义为int类型void Joseph(int code ,int n)/通过一维数组code带入n个人手中的密码,n是开始就坐在桌旁的人数 SQ_LIST people; int temp,m; /m是报数的上限值 scanf(“%d”,&m); /输入最初的m if (InitList(&peo

10、ple)=ERROR) exit ERROR; for (i=1;i=n;i+) if (ListInsert(&people,i,codei-1)=ERROR) exit ERROR; position=0; /记录当前报数人的编号count=0; /记录当前所报的数目for (i=1;i0) count+; while (count!=m); printf(“%d”,position); /输出当前离开桌旁人的编号 GetElem(people,position,&m); people.itemposition-1=-people.itemposition-1; /将密码变为负值 二、链式

11、存储结构typedef struct /循环链表中每个结点的数据域部分的类型 int No; /编号 int code; /密码INFO;typedef INFO EntryTypevoid Joseph(int code,int n) LINK_LIST people; NODE *position,*pre; /position指向当前报数的结点 if (InitList(&people)=ERROR) exit ERROR; /初始化链表people for (i=1;inext!=people.head) position= NextElem(people,position); sca

12、nf(“%d”,&m); /输入最初的m for (i=1;iitem.No); /离开桌子处理 m=position-item.code; pre=PriorElem(people,position); pre-next=position-next; free(position); position= pre; printf(“%d”,position-item.No); /处理最后一个人 free(position);第三章1.串的初始化void clear(STRING *s)int i;for(i=0;iSTRINGMAX;i+)(*s).chi=0;(*s).len=0;2.求串的长

13、度int length(STRING *s)return(*s).len);3.从文本文件f读入的内容建立串svoid reading(STRING *S,char f)FILE *fp;int i=1;clear(s);if(fp=fopen(f,”r”)=NULL)printf(“不能打开此文件n”);exit(0);while(*s).chi=fgetc(fp)!=EOF)&(i(STRINGMAX-1) printf(“串太长n”);elsek=(*s).len;for(j=1;j(*s).len+1)span=(*s).len-start+1;if(start1)|(span1)cl

14、ear(t);elsefor(i=1;i0)if(start0)|(start=(*s).len+1)if(*s).len+(*t).len=start;i-)(*s).chi+(*t).len=(*s).chi;(*s).len=(*s).len+(*t).len;j=start+(*t).len-1;for(i=start;i=j;i+)(*s).chi=(*t).chi-start+1;else printf(“t串太长n”);else printf(“插入位置start不合适n”);else printf(“t串是空串n”); 例如:a=“abbcbbdbb”,b=“bb”,c=“*”

15、,则替换后a=“a*c*d*”.void replace(STRING *a,STRING *b,STRING *c)int index,p,m,n,s;n=(*a).len; m=(*b).len; s=(*c).len;p=1;doindex=index1(a,b,p);if(index!=0)delete(a,index,m);insert(a,c,index);p=index+s;n=(*a).len;while(p0)q=1;for(col=1;col=n;col+)for(k=1;k=t;k+)if(ak.j=col)bq.i=ak.j;bq.j=ak.i;bq.val=ak.va

16、l;q+;数组结点类型定义如下:struct nodeint row,col;struct node *right,*down;unionfloat val;struct node *next; same;第五章按层次遍历方法来建立二叉树的算法,#define MAX 61struct nodechar data;struct node *lc,*rc;typedef struct node NODE;NODE *narMAX; /* 存放结点的数组 */NODE *setuptree(NODE *t)NODE *p;char x;int f,i,j,n;scanf(“%d”,&n);for(

17、i=1;ilc=NULL;p-rc=NULL;p-data=x;narj=p;if(j=1)t=p;elsef=j/2;if(j%2=0)narf-lc=p;elsenarf-rc=p;return(t);中序遍历的非递归算法void inorder(NODE *p)NODE *q; int top;enumfalse,truefinish;NODE *sMAX;top=-1;q=p;finish=false;doif(q!=NULL)top+;if(topMAX-1)finish=true;printf(“栈上溢n”);elsestop=q;q=q-lcelseif(top =-1)fini

18、sh=true;elseq=stop-;printf(“%c”,q-data);q=q-rc;while(finish=false);面给出中序线索树算法。void inthread(THRENODE *t)THRENODE *p,*pr; *sMAX;int top;pr=NULL;top=-1;p=t;dowhile(p!=NULL)s+top=p;p=p-lc;if(top!=-1)p=stop-;printf(“%c”,p-data);if(p-lc=NULL)p-lt=1;p-lc=pr;elsep-lt=0;if(pr!=NULL)if(pr-rc=NULL)pr-rc=p;pr-

19、rt=1;else pr-rt=0;pr=p;p=p-rcwhile(p!=NULL)|(tpo!=-1);printf(“n”);pr-rt=1;时间复杂度:O(n);空间复杂度:O(k)建立二叉排序树,其类型说明如下:struct nodeint data;struct node *lc,*rc;typedef struct node NODE;例如:给出K=10,18,3,8,19,2,7,8,按上述原则构造二叉排序树,非递归算法:NODE *sortree(NODE *t)NODE *p,*q;int x; enumfalse,truebool;printf(“read keyword

20、 x:”);scanf(“%d”,&x);q=(NODE *)malloc(sizeof(NODE);q-lc=NULL;q-rc=NULL;q-data=x;if(t=NULL)t=q;elsep=t; bool=true;doif(p-datax)if(p-lc!=NULL)p=p-lc;elsep-lc=q;bool=false;elseif(p-rc!=NULL)p=p-rc;elsep-rc=q;bool=false;while(bool=true);return(t);用C语言描述哈夫曼算法。类型定义及C函数如下:struct nodeint tag,data,lc,rc;type

21、def struct node NODE;int huffman(NODE r)int y,n,m1,m2,x1,x2,i,j,t;scanf(“%d”,&n);for(i=1;i=n;i+)scanf(“%d”,&y);ri.data=y;ri.tag=0;ri.lc=0;ri.rc=0;i=0;while(i=n-1)m1=32767;m2=32767;x1=0;x2=0;for(j=1;j=n+i;j+)if(rj.datam1)&(rj.tag=0)m2=m1;x2=x1;m1=rj.data;x1=j;elseif(rj.datavex.vex=0)dfs(adl,p-vex);p=p-next;拓扑排序的具体函数如下:#include “stdio.h”typedef struct nodeint vex;struct node *next;NODE;void toporder(NODE al,int n)int i,j,k,top;NODE *q;top=0; /*初识化栈*/for(i=1;i=n;i+)if(ali.vex=0) /*判断i位置的顶点入度是否

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1