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