数据结构代码

上传人:回**** 文档编号:124485305 上传时间:2022-07-25 格式:DOC 页数:23 大小:60KB
收藏 版权申诉 举报 下载
数据结构代码_第1页
第1页 / 共23页
数据结构代码_第2页
第2页 / 共23页
数据结构代码_第3页
第3页 / 共23页
资源描述:

《数据结构代码》由会员分享,可在线阅读,更多相关《数据结构代码(23页珍藏版)》请在装配图网上搜索。

1、数据构造代码P20,例2-1void union (List &La, List Lb) La_len= ListLength (La); Lb_len= ListLength (Lb); for (i=1;i= Lb_len;i+) GetElem (Lb,i,e); if(!LocateElem(La,e,equal) ListInsert(La,+ La_len,e); P21, 例2-2,将void MergeList(List La,List Lb,List &Lc)InitList(Lc);i=j=1;k=0;La_len=ListLength(La);Lb_len=ListLen

2、gth (Lb);while(i=La_Len)&(j=Lb_len) GetElem(La,i,ai);GetElem(Lb,j,bj); if(ai= bj)ListInsert(Lc,+k, ai);+i; else ListInsert(Lc,+k, bj);+jwhile (i=La_len) GetElem(La, i+, ai);ListInsert(Lc, +k, ai);while (j=Lb_len) GetElem(Lb, i+, bj);ListInsert(Lc, +k, bj); P22,线性表旳顺序存储构造#define LIST_INIT_SIZE 100#de

3、fine LISTINCREMENT 10 typedef struct ElemType *elem; /* 线性表占用旳数组空间 */ int length; int listsize; SqList;P23,线性表顺序存储构造上旳基本运算初始化操作Status IniList_Sq(SqList &L) L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType); if(!L.elem) exit(OVERFLOW); L.length=0; L.listsize=LIST_INIT_SIZE; return OK; P24,在顺序表

4、里插入一种元素Status ListInsert_sq(SqList &L, int i, ElemType e) if(i=L.length+1) return ERROR; if(L.length=L.listsize) newbase=(ElemType*)realloc(L.elem, (L.listsize+LISTINCREMENT)*sizeof(ElemType); if(!newbase)exit(OVERFLOW); L.elem=newbase; L.listsize+=LISTINCREMENT; q=&(L.elemi-1); for(p=&(L.elemL.leng

5、th-1);p=q;-p) *(p+1)=*p; *q=e; +L.length; return OK; P24,在顺序表里删除一种元素Status ListDelete_Sq(SqList &L,int i,ElemType &e)if( (iL.length) ) return ERROR;p=&(L.elemi-1);e=*p; q=L.elem+L.length-1;for(+p; p=q; +p) *(p-1)=*p;-L.length;return OK;P25,在顺序表里查找一种元素int LocatElem_Sq(SqList L,ElemType e, Status(*com

6、pare)(ElemType, ElemType)i=1;p=L.elem;while (i=L.length & !(*compare)(*p+,e) +i;if (i=L.length) return i;else return 0; P26,顺序表旳合并void MergeList_Sq(SqList La, SqList Lb, SqList &Lc )pa=La.elem; pb=Lb.elem;Lc.listsize=Lc.length=La.length+Lb.length;pc=Lc.elem=(ElemType*)malloc(Lc.listsize*sizeof(ElemT

7、pe);if (!Lc.elem) exit (OVERFLOW);pa_last=La.elem+La.length-1;pb_last=Lb.elem+Lb.length-1;while (pa=pa_last & pb=pb_last) if (*pa=*pb) *pc+=*pa+; else *pc+=*pb+;while(pa=pa_last) *pc+=*pa+;while(pbnext; j=1; while(p & jnext; +j; if( !p | ji) returnERROR; e=p-data; returnok; P29,在单链表中插入一种元素StatusList

8、Insert_L(LinkList&L,inti, ElmeTypee)p=L;j=0;while( p & jnext; +j;if( !p | ji-1)returnERROR;s=(LinkList)malloc(sizeof(LNode);s-data=e; s-next=p-next; p-next=s;returnOK; P30,在单链表中删除一种元素StatusListDelete_L(LinkList&L,inti,Elemtype&e)p=L;j=0;while( p-next & jnext; +j;if( !(p-next) | ji-1)returnERROR;q =

9、p-next; p-next=q-next;e = q-data; free(q);returnOK; P30,建立单链表voidCreateList_L(LinkList&L,intn)L=(Linklist) malloc(sizeof(Lnode);L-next=NULL;for(i=n; i0; -i)p=(LinkList)malloc(sizeof(Lnode);scanf(&p-data);p-next=L-next; L-next=p; P31,合并单链表voidmergelist_L(LinkList&La,LinkList &Lb,LinkList&Lc)pa=La-nex

10、t; pb=Lb-next;Lc=pc=La;while( pa & pb)if( pa-data data)pc-next=pa; pc=pa; pa=pa-next;else pc-next=pb; pc=pb; pb=pb-next;pc-next= pa ? pa : pb;free(Lb); P31,线性表旳静态单链表存储构造#defineMAXSIZE1000typedefstructElemTypedata;intcur;component,SlinkListMAXSIZE; P32,定位函数intLocateElem_SL(SlinkLists, ElemTypee)i=s0.

11、cur;while( i & si.data!=e)i=si.cur;returni; P33,voidIniteSpace_SL(SlinkList&space)for(i=0; i= S.stacksize) S.base=(SElemType*)realloc(S.base, (S.stacksize+STACKINCREMENT)*sizeof(SElemType); if(!S.base) exit(OVERFLOW); S.top=S.base+S.stacksize; S.stacksize+=STACKINCREMENT; *S.top+=e; return OK; 出栈Sta

12、tus Pop(SqStack &S, SelemType &e) if( S.top= =S.base) return ERROR; e=*-S.top; return OK;P48,转换为8进制void conversion()InitStack(S);scanf(“%d”,&N);while(N)Push(s, N % 8 );N=N / 8;while( !StackEmpty(s)Pop(S,e);printf(“%d”,e); P55,移动圆盘void hanoi(int n,char x,char y,char z) /*将塔座X上按直径由小到大且至上而下编号为1至n旳n个圆盘按

13、规则搬到塔座Z上, Y可用作辅助塔座 */ if(n=1) move(x,1,z); /* 将编号为1旳圆盘从X移动Z */ else hanoi(n-1,x,z,y); /* 将X上编号为1至n-1旳圆盘移到Y,Z作辅助塔 */ move(x,n,z); /* 将编号为n旳圆盘从X移到Z */ hanoi(n-1,y,x,z); /* 将Y上编号为1至n-1旳圆盘移动到Z, X作辅助塔 */ P61,链式队列旳定义define TRUE 1define FALSE 0typedef struct QNode QElemType data; struct QNode *next;QNode,

14、*QueuePtr;typedef struct QueuePtr front; QueuePtr rear;LinkQueue;P62,初始化Status InitQueue(LinkQueue &Q) Q.front = Q.rear = (Queueptr) malloc(sizeof(QNode); if(!Q.front) exit ( OVERFLOW); Q.front -next = NULL; return OK; 销毁队列Status DestroyQueue(LinkQueue &Q) while(Q.front) Q.rear = Q.front-next;free (

15、Q.front);Q.front = Q.rear; return OK;入队操作 Status EnQueue (LinkQueue &Q, QelemType e) p= (QueuePtr) malloc(sizeof(QNode); if (!p) exit ( OVERFLOW); p-data = e; p-next = NULL; Q.rear - next =p; Q.rear = p; return OK;出队操作 Status DeQueue (LinkQueue &Q, QelemType &e) if ( Q.front = Q.rear) return ERROR;

16、p=Q.front-next; e=p-data; Q.front-next =p-next; if (Q.rear = p) Q.rear = Q.front; free(p); return OK;P64,循环对列定义#define MAXQSIZE 100 /*队列旳最大长度*/typedef struct QElemType *base; /* 队列旳元素空间*/ int front; /*头指针批示器* int rear; /*尾指针批示器*/SqQueue; 初始化操作 Status InitQueue (SqQueue &Q) Q.base = (QElemType * )mal

17、loc(MAXQSIZE * sizeof (QElemType); if ( ! Q. base) exit (OVERFLOW); Q. front = Q. rear = 0; return OK;入队操作 Status EnQueue (SqQueue &Q, QElemType e) if (Q. rear+ 1) % MAXQSIZE = Q. front) return ERROR; Q.baseQ.rear = e; Q.rear = (Q. rear + 1) % MAXQSIZE; return OK;) 出队操作 Status DeQueue (SqQueue &Q, Q

18、ElemType &e) if (Q. front = = Q. rear) return ERROR; e = Q. baseQ. front; Q. front = (Q. front + 1) % MAXQSIZE; return OK;求队列长度int QueueLength (SqQueue Q) return (Q. rear - Q. front + MAXQSIZE) % MAXQSIZE;P93/-数组旳顺序存储表达include# define MAX_ARRAY_DIM 8typedef struct ELemType *base; /数组元素基址 int dim; /数

19、组维数 int *bounds; /数组维数基址 int *constants; /数组映像函数常量基址 Array;P98,三元数组顺序表存储# define MAXSIZE 12500typedef struct int i, j ; ElemType e ;Triple ;typedef union Triple data MAXSIZE+1 ; int mu, nu, tu ;TSMatrix ; P99,矩阵转置Status TransposeSMatrix ( TSMatrix M, TSMatrix & T ) T.mu=M.nu; T.nu=M.mu; T.tu=M.tu; i

20、f( T.tu ) q=1; for( col=1; col=M.nu; +col) for( p=1; p=M.tu; +p ) if( M.datap.j = col ) T.dataq.i = M.datap.j ; T.dataq.j = M.datap.i ; T.dataq.e = M.datap.e ; + q; return OK; / TransposeSMatrix P100Status FastTransposeSMatrix( TSMatrix M, TSMatrix &T )/采用三元组顺序表存储表达,求稀疏矩阵M旳转置矩阵T。 T.mu=M.nu; T.nu=M.m

21、u; T.tu=M.tu; if(T.tu) for(col=1;colM.nu;col+) numcol=0; for(t=1; t=M.nu;+t) +numM.datat.j; /求M中每一列含非零元个数。 copt1=1; / 求第col列中第一种非零元在b.data中旳序号 for(col=2;col=M.nu; +col) cpotcol=cpotcol-1+numcol-1; for(p=1; pdata ) )5 if ( PreOrderTraverse ( T-lchild , Visit ) ) 6 if ( PreOrderTraverse ( T-rchild, Vi

22、sit ) ) return OK;7 return ERROR;8 9 else return OK;10 中序遍历 Status InOrderTraverse ( Bitree T, Status ( * Visit ) ( TelemType e ) )12 if ( T ) 3 4 if ( InOrderTraverse ( T-lchild , Visit ) )5 if ( Visit ( T-data ) )6 if ( InOrderTraverse ( T-rchild, Visit ) ) return OK;7 return ERROR;8 9 else return

23、 OK;10 P131,中序遍历二叉树Status InOrderTraverse( BiTree T, Status ( * Visit ) ( TelemType e ) ) InitStack ( S ); Push ( S, T ); While( !StackEmpty ( S ) ) while ( GetTop ( S, p ) &p) Push ( S, p-lchild ); Pop ( S, p ); if ( !StackEmpty ( S ) ) Pop ( S, p ); if ( !Visit ( p-data ) ) return ERROR; Push ( S,

24、 p-rchild ); / if / While return OK;/ InOrderTraverse Status InOrderTraverse ( BiTree T, Status ( *Visit ) ( TelemType e ) ) InitStack ( S ); p=T; While ( p | !StackEmpty ( S ) ) if ( p ) Push ( S, p ); p=p-lchild; else Pop ( S, p ); if ( !Visit ( p-data ) ) return ERROR; p=p-rchild; return OK; void

25、 PreOrder(BiTree root) /* 先序遍历输出二叉树中旳叶子结点, root为指向二叉树根结点旳指针 */ if (root! =NULL) if (root -LChild=NULL & root -RChild=NULL) printf (root -data); /* 输出叶子结点 */ PreOrder(root -LChild); /* 先序遍历左子树 */PreOrder(root -RChild); /* 先序遍历右子树 */ 记录叶子结点数目 LeafCount是保存叶子结点数目旳全局变量, 调用之前初始化值为0 */void leaf(BiTree root

26、) if(root! =NULL) leaf(root-LChild); leaf(root-RChild); if (root -LChild=NULL & root -RChild=NULL) LeafCount+; /* 采用递归算法,如果是空树,返回0;如果只有一种结点,返回1;否则为左右子树旳叶子结点数之和 */int leaf(BiTree root) int LeafCount; if(root=NULL) LeafCount =0; else if(root-lchild=NULL)&(root-rchild=NULL) LeafCount =1; else LeafCount

27、 =leaf(root-lchild)+leaf(root-rchild); /* 叶子数为左右子树旳叶子数目之和 */ return LeafCount; P131,建立二叉链表方式存储旳二叉树Status CreateBiTree( BiTree &T ) scanf ( &ch ); if ( ch = ) T = NULL; else if ( !( T=( BiTNode * ) malloc (sizeof(BiTNode ) ) ) ) exit ( OVERFLOW ); T-data=ch; CreateBiTree( T-lchild ); CreateBiTree( T-

28、rchild ); return OK; int PostTreeDepth(BiTree bt) /* 后序遍历求二叉树旳高度递归算法 */ int hl, hr, max; if(bt! =NULL) hl=PostTreeDepth(bt-LChild); /* 求左子树旳深度 */ hr=PostTreeDepth(bt-RChild); /* 求右子树旳深度 */ max=hlhr?hl: hr; /* 得到左、 右子树深度较大者*/ return(max+1); /* 返回树旳深度 */ else return(0); /* 如果是空树, 则返回0 */ void PrintTre

29、e(Bitree root, int nLayer) /* 按竖向树状打印旳二叉树 */ if(root= =NULL) return; PrintTree(root-rchild, nLayer+1); for(int i=0; idata); PrintTree(root-lchild, nLayer+1); P135双亲表达法旳形式阐明如下#define MAX_TREE_SIZE 100typedef struct PTNode TelemType data; int parent;PTNode;typedef struct PTNode nodes MAX_TREE_SIZE ; i

30、nt r, n;Ptree; 孩子表达法typedef struct CTNode int child; struct CTNode *next; *ChildPtr; typedef struct TelemType data; ChildPtr firstchild; CTBox; typedef struct CTBox nodes MAX_TREE_SIZE ; int n, r; Ctree; 孩子兄弟表达法旳类型定义如下typedef struct CSNode ElemType data; struct CSNode *firstchild, *nextsibling;CSNode, *CSTree;

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

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!