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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构.docx

1、数据结构1、二叉树的顺序存储#includestdio.h#includestring.htypedef struct sqBiTree int n; char bt80;sqBiTree;sqBiTree sqbta;void createSqBiTree(sqBiTree &sqbt,int m) sqbt.n=m; int i; int j; char ch; for(i=0;i80;i+) sqbt.bti=#; for(i=0;im;i+) printf(请输结点编号和值:n); scanf(%d,&j); ch=getchar(); sqbt.btj=ch; void output

2、sqbitree(sqBiTree &sqbt) int i; printf(二叉树的结点总数是%dn,sqbt.n); for(i=0;inext=NULL; return 1; else printf(初始化失败!n); return 0; int Lnkinsertrear(Linklist &L,int e)/在当前链表的末尾插入新元素为e的结点 Linklist s,p; p=L; while(p-next !=NULL) p=p-next ; s=(Lnode *)malloc(1*sizeof(Lnode); if(s!=NULL) s-data =e; s-next =NULL

3、; p-next =s; printf(插入成功!n); return 1; else return 0; void Lnkinserthead(Linklist &L,int e)/插入的结点作为链表的第一个结点 Linklist p,s; p=L; s=(Lnode *)malloc(1*sizeof(Lnode); s-data =e; s-next =p-next ; p-next =s;void outputlnklst(Linklist &L)/输出链表L中结点的数据元素值 Linklist p; p=L; printf(链表中的数据元素值如下:n); while(p-next !

4、=NULL) p=p-next ; printf(%d,p-data ); int lnklength(Linklist &L)/求链表长度 int len=0; Linklist p; p=L; while(p-next!=NULL) len+; p=p-next ; return len;int lnkinsert(Linklist &L,int i,int e)/在第i个结点之前插入元素值为e的结点 int j=0; Linklist p,s; if(ilnklength(L) printf(插入位置不合法!n); return 0; else p=L; while(jnext ; j+

5、; s=(Lnode *)malloc(1*sizeof(Lnode); s-data =e; s-next =p-next ; p-next =s; printf(插入成功!n); return 1; int Lnkdelete(Linklist &L,int i,int &e)/删除链表中的第i个数据元素,被删除的元素暂时存储于e中 int j=0; Linklist p,q; if(ilnklength(L) printf(删除位置不合法!n); return 0; else p=L; while(jnext ; j+; q=p-next ; e=q-data ; p-next =q-n

6、ext ; free(q); printf(删除成功!n); return 1; void main() Linklist La; int i; int len; int x; Init_lnklst(La); /* for(i=1;i=1;i-) /调用头插法建立单链表 Lnkinserthead(La,i*10); outputlnklst(La); printf(n); len=lnklength(La); printf(len=%dn,len); lnkinsert(La,3,25); outputlnklst(La); printf(n); Lnkdelete(La,4,x); pr

7、intf(被删除的元素为:%dn,x); outputlnklst(La); printf(n);3、二叉链表的链式存储#include stdio.h#include string.h#include stdlib.h#include windows.htypedef struct BTNode/二叉链表数据类型构造 char data; struct BTNode *Lchild,*Rchild;BTNode,*BTree;/*BTree is address of root*/BTree Pre_Create_BT(BTree BT)/返回指针的函数 -先序方式创建二叉链表 char c

8、h; ch=getchar(); if(ch=#) return NULL;/*make an empty tree!*/ else BT=(BTNode *)malloc(sizeof(BTNode); /*get a space of node*/ BT-data=ch; BT-Lchild=Pre_Create_BT(BT );/*make left tree*/ BT-Rchild=Pre_Create_BT(BT );/*make right tree*/ return BT; void Visit(BTree BT)/访问结点的数据元素值 if(BT) printf(%c,BT-d

9、ata);void PreOrder(BTree BT)/先序遍历二叉树 if(BT) Visit(BT); PreOrder(BT-Lchild); PreOrder(BT-Rchild); void InOrder(BTree BT)/中序遍历二叉树 if(BT) InOrder(BT-Lchild); Visit(BT); InOrder(BT-Rchild); void PostOrder(BTree BT)/后续遍历二叉树 if(BT) PostOrder(BT-Lchild); PostOrder(BT-Rchild); Visit(BT); void main() BTree p

10、bt; system(cls);/清屏 printf(input tree node elem(elem-left-right):n); pbt=Pre_Create_BT(pbt); printf(preorder bitree,output elem is:n); PreOrder(pbt); printf(ninorder bitree,output elem is:n); InOrder(pbt); printf(npostorder bitree,output elem is:n); PostOrder(pbt); printf(n pbt node data:%cn,pbt-dat

11、a); getchar(); getchar();4、顺序表的操作#includestdio.h#includestdlib.h/线性表的顺序存储结构,简称顺序表/顺序表数据类型构造如下:#define LIST_INIT_SIZE 100/线性表的初始空间大小#define LISTINCREMENT 10/增量typedef struct int *elem;/设线性表中数据元素类型为整型,指针变量elem就是基地址(一段连续存储空间首地址) int length;/顺序表的长度 int listsize;/当前存储空间的大小SqList;/操作1-顺序表的初始化/功能:向系统申请一段连续

12、的存储空间,类型是elemtype型,用elem存储基地址/ 顺序表的长度设置为0,初始大小设置为LIST_INIT_SIZE/形参类别:1、普通变量作形参 2、指针变量作形参 3、引用作形参int initSqList(SqList &L) L.elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int); if(L.elem!=NULL) L.length=0; L.listsize=100; printf(顺序表的初始化成功!n); return 1; else printf(顺序表的初始化不成功!n); return 0; /操作2:创建具有n个元素的顺序

13、表int createsqlist(SqList &L,int n)/创建具有n个元素的顺序表 /将n个元素依次存入存储空间中 int i; if(nL.listsize ) printf(无法创建顺序表,指定的n太大!n); return 0; else printf(input %d num:n,n); for(i=0;in;i+) scanf(%d,&L.elemi); L.length =n; return 1; /操作3:输出顺序表中的数据元素void outputsqlst(SqList &L) int i; printf(顺序表中的数据元素如下:n); for(i=0;iL.le

14、ngth ;i+) printf(%d ,L.elem i); printf(n);/操作算法4:删除顺序表中的第i个元素int deletesqlst(SqList &L,int i,int &e) int j; if(iL.length) printf(删除位置不合法!n); return 0; else e=L.elem i-1; for(j=i;jL.length ;j+) L.elemj-1=L.elemj; L.length -; printf(删除成功!n); return 1; /操作算法4:第i个元素之前插入新元素eint sqlstinsert(SqList &L,int

15、i,int e) int j; int *newbase; if(iL.length) printf(删除位置不合法!n); return 0; else if(L.length =L.listsize ) newbase=(int *)realloc(L.elem ,(L.listsize +10)*sizeof(int); if(newbase=NULL) printf(顺序表满了,而动态增加存储空间失败,不能插入新元素!n); return 0; else L.elem =newbase; L.listsize +=10; for(j=L.length -1;j=i;j-) L.elem

16、 j+1=L.elem j; L.elem i-1=e; L.length +; printf(插入成功!n); return 1; else for(j=L.length -1;j=i;j-) L.elem j=L.elem j-1; L.elem i-1=e; L.length +; printf(插入成功!n); return 1; void main() SqList La; int e; initSqList(La); createsqlist(La,5); outputsqlst(La); deletesqlst(La,3,e); outputsqlst(La); sqlstins

17、ert(La,1,5); outputsqlst(La);5、顺序栈操作#includestdio.h#includestdlib.h/顺序栈数据类型构造typedef struct /设栈中数据元素类型为整型 int *base;/栈底指针 int *top;/栈顶指针 int stacksize;/栈当前存储空间大小sqstack;/操作1:栈的初始化int initsqstack(sqstack &s)/功能:向系统申请一段连续的存储空间,当做栈使用 s.base=(int *)malloc(100*sizeof(int); if(s.base!=NULL) printf(栈初始化成功!

18、n); s.top=s.base; s.stacksize=100; return 1; else printf(栈初始化失败!n); return 0; /操作2:数据元素压入堆栈int push(sqstack &s,int e) if(s.top -s.base =s.stacksize ) s.base =(int *)realloc(s.base ,(100+10)*sizeof(int); if(s.base =NULL) printf(再次追加存储空间失败!n); return 0; else printf(再次追加存储空间成功!n); s.top =s.base +s.stac

19、ksize ; s.stacksize =110; *s.top =e; s.top +; printf(数据元素入栈成功!n); return 1; else *s.top =e; s.top +; printf(数据元素入栈成功!n); return 1; /操作3:弹出堆栈-数据元素出栈int pop(sqstack &s,int &e) if(s.top =s.base ) printf(栈为空,不能弹出数据元素!n); return 0; else s.top -; e=*s.top ; return 1; /操作4:求栈的长度int sqstacklength(sqstack &s

20、) return s.top-s.base;/操作5:判断栈是否为空int emptysqstack(sqstack &s)/若为空栈,则返回1,否则返回0 if(s.top=s.base) printf(空栈!n); return 1; else printf(非空栈!n); return 0; void conversion(int n,int m) int x; sqstack sb; initsqstack(sb); while(n!=0) push(sb,n%m); n=n/m; while(sb.top !=sb.base ) pop(sb,x); switch(x) case 1

21、0: printf(A); break; case 11: printf(B); break; case 12: printf(C); break; case 13: printf(D); break; case 14: printf(E); break; case 15: printf(F); break; default: printf(%d,x); printf(n);void main() int i; int x; sqstack sa; initsqstack(sa); push(sa,10); for(i=0;i105;i+) push(sa,10*(i+1); if(sa.to

22、p-sa.base=sa.stacksize) printf(栈满!n); pop(sa,x); printf(x=%dn,x); conversion(255,8); 6、循环队列#includestdio.h#includestdlib.h/构造循环队列的数据结构typedef struct int *base; int front; int rear;sqQueue;/算法程序1:循环队列的初始化/用户自定义函数的构成:(1)函数首部:函数的返回值类型,函数名,形参列表 (2)函数体int initsqQueue(sqQueue &q)q.base=(int *)malloc(100*s

23、izeof(int); if(q.base!=NULL) printf(循环队列初始化成功!n); q.front=q.rear=0; return 1; else printf(初始化失败!n); return 0; /数据元素e进入队列qint ensqQueue(sqQueue &q,int e) if(q.rear+1)%100=q.front) printf(循环队列满,数据元素不能进入队列!n); return 0; else q.base q.rear=e; q.rear =(q.rear +1)%100; printf(数据元素入队列成功!n); return 1; /数据元素出队列int desqQueue(sqQueue &q,int &e) if(q.front =q.rear ) printf(循环队列为空,不能出队列!n); return 0; else e=q.base q.front ; q.front =(q.front +

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

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