1、数据结构总结实验内容与步骤:实现顺序表初始化、插入、删除算法,代码如下:#include #include #define MaxSize 100typedef char ElemType;typedef struct ElemType *elem; int length;SqList;int InitList_Sq(SqList &L)L.elem=(ElemType*)malloc(MaxSize*sizeof(ElemType); if(!L.elem) return 0; L.length = 0; return 1;int ListInsert_Sq(SqList &L,int i,
2、ElemType e) if(iL.length+1) return 0; ElemType *p; ElemType *q=&L.elemi-1; for(p=&L.elemL.length-1;p=q;-p) *(p+1)=*p; *q=e; +L.length; return 1;int ListDelete_Sq(SqList &L,int i,ElemType &e) if(iL.length) return 0; ElemType *p=&(L.elemi-1); e=*p; ElemType *q=L.elem+L.length-1; for(+p;p=q;+p) *(p-1)=
3、*p; -L.length; return 1;void Disp_Sq(SqList L)if(L.length=0) printf(此顺序表为空表!n); for(int i=0;iL.length;i+) printf(%c,L.elemi); printf(n);void main() ElemType e; SqList L; InitList_Sq(L); Disp_Sq(L); ListInsert_Sq(L,1,A); ListInsert_Sq(L,2,B); ListInsert_Sq(L,1,C); Disp_Sq(L); ListDelete_Sq(L,1,e); Di
4、sp_Sq(L); printf(删除的元素是:%cn,e);实验指导与数据处理:实验结果:此顺序表为空表! ABC BC 删除的元素是:A实验内容与步骤:实现循环队列初始化、入队、出队、求队列长度算法,代码如下:#include #include #define MAXQSIZE 5typedef char QElemType;typedef struct QElemType *base; int front; int rear;SqQueue;int InitQueue(SqQueue &Q) Q.base=(QElemType*)malloc(MAXQSIZE*sizeof(QElemT
5、ype); if(!Q.base) return 0; Q.front = Q.rear =0; return 1;int QueueLength(SqQueue Q) return(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE;int EnQueue(SqQueue &Q,QElemType e) if(Q.rear+1) % MAXQSIZE = Q.front) printf(队列为满队列!n); return 0; Q.baseQ.rear = e; Q.rear = (Q.rear+1) % MAXQSIZE; return 1;int DeQueue(SqQu
6、eue &Q,QElemType &e) if(Q.front = Q.rear) return 0; e = Q.baseQ.front; Q.front = (Q.front+1) %MAXQSIZE; return 1;void DispQueue(SqQueue Q) int m,i; m = QueueLength(Q); if(m =0) printf(该队列为空队列!n); for(i = Q.front; i%MAXQSIZE!=Q.rear; i+) printf(%c,Q.basei%MAXQSIZE); printf(n);void main() SqQueue Q; Q
7、ElemType e; InitQueue(Q); DispQueue(Q); EnQueue(Q,A); EnQueue(Q,B); EnQueue(Q,C); EnQueue(Q,D); printf(队列长度为:); printf(%dn,QueueLength(Q); printf(队列为:); DispQueue(Q); DeQueue(Q,e); printf(队列长度为:); printf(%dn,QueueLength(Q); printf(队列为:); DispQueue(Q); EnQueue(Q,E); printf(队列长度为:); printf(%dn,QueueLe
8、ngth(Q); printf(队列为:); DispQueue(Q); EnQueue(Q,F); printf(队列为:); DispQueue(Q); 实验指导与数据处理:实验结果:该队列为空队列! 队列长度为:4 队列为:ABCD 队列长度为:3 队列为: BCD 队列长度为:4 队列为: BCDE 队列为满队列! 队列为: BCDE实验内容与步骤:实现顺序栈初始化、入栈、出栈、取栈顶元素算法,代码如下:#include #include #define STACK_INIT_SIZE 100#define STACKINCREMENT 10typedef char SElemType
9、;typedef struct SElemType *base; SElemType *top; int stacksize;SqStack;int InitStack(SqStack &S) S.base = (SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType); if(!S.base) return 0; S.top = S.base; S.stacksize = STACK_INIT_SIZE; return 1;int GetTop(SqStack S,SElemType &e) if(S.top = S.base) return
10、0; e = *(S.top-1); return 1;int Push(SqStack &S,SElemType e) if(S.top-S.base= S.stacksize)S.base = (SElemType *)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType); if(!S.base) return 0; S.top = S.base+S.stacksize; S.stacksize+=STACKINCREMENT; *S.top+ = e; return 1;int Pop(SqStack &S,SElem
11、Type &e) if(S.top = S.base) return 0; e = *-S.top; return 1;void DispStack(SqStack S) /从栈顶到栈底输出元素 int i; if(S.top=S.base)printf(空栈!); for(i=S.top-S.base; i0; i-) printf(%c,S.basei-1); printf(n);void main() SElemType e; SqStack S; InitStack(S); Push(S,A); Push(S,B); Push(S,C); Push(S,D); printf(栈S为:)
12、; DispStack(S); GetTop(S,e); printf(栈顶元素是:); printf(%cn,e); Pop(S,e); printf(栈S为:); DispStack(S);实验指导与数据处理:实验结果:栈S为:DCBA 栈顶元素是:D 栈S为:CBA实验内容与步骤:掌握将一个链表删除得元素插入到另一个链表的算法。实现创建链表La,Lb,利用链表La和Lb构建一个新的链表Lc,使得链表Lc中包含属于La但不属于Lb中的元素算法,代码如下:#include #include typedef char ElemType;typedef struct LNode ElemType
13、 data; struct LNode *next;LNode,*LinkList;/链表的初始化int InitList_L(LinkList &L) L= (LinkList)malloc(sizeof(LNode); L-next=NULL; return 1;/链表插入int ListInsert(LinkList &L,int i,ElemType e) LinkList p; p=L; int j=0; while(p&jnext; +j; if(!p|ji-1) return 0; LinkList s=(LinkList)malloc(sizeof(LNode); s-data
14、=e; s-next=p-next; p-next=s; return 1;/链表删除int ListDelete_L(LinkList &L,int i,ElemType &e) LinkList p; p=L; int j=0; while(p-next&jnext; j+; if(!(p-next)|ji-1) return 0; LinkList q=p-next; p-next=q-next; e=q-data; free(q); return 1;/链表显示void Disp_L(LinkList L) LinkList p=L-next; if(!p) printf(此链表为空!
15、); while(p) printf(%c,p-data); p=p-next; printf(n);/假设利用两个单链表LA和LB分别表示两个集合A和B,现要求一个新的集合C=A-B,即两个集合的差。void sample(LinkList La, LinkList Lb, LinkList &Lc) LinkList pa,pb,r,s; pa = La-next; Lc = (LinkList)malloc(sizeof(LNode);/生成新链表Lc的头结点 Lc-next = NULL; r = Lc; while(pa) pb = Lb-next; while( pb & pb-d
16、ata!=pa-data) /查看La中当前结点数据是否存在于Lb中 pb=pb-next; if(pb = NULL) /若La中当前结点数据不存在于Lb中,则将其复制到Lc新节点中 s = (LinkList)malloc(sizeof(LNode); s-next = NULL; s-data = pa-data; r-next = s; r = s; pa = pa-next; void main() LinkList LA,LB; InitList_L(LA); ListInsert(LA,1,A); ListInsert(LA,2,B); ListInsert(LA,3,C); L
17、istInsert(LA,4,D); ListInsert(LA,5,D); ListInsert(LA,6,F); ListInsert(LA,7,B); ListInsert(LA,8,H); Disp_L(LA); InitList_L(LB); ListInsert(LB,1,1); ListInsert(LB,2,B); ListInsert(LB,3,D); Disp_L(LB); sample(LA,LB,LC); printf(nsample后:n); Disp_L(LA); Disp_L(LB); Disp_L(LC); getchar();实验内容与步骤:掌握将一个链表拆分
18、成两个链表的算法。将创建的链表La分解成La、Lb两个链表,La链表里的数据为奇数,Lb链表里的数据为偶数,除Lb的头结点之外不开辟新的存储空间并进行显示的操作,代码如下:#include #include typedef int ElemType;typedef struct LNode ElemType data; struct LNode *next;LNode,*LinkList;/链表的初始化int InitList_L(LinkList &L) L= (LinkList)malloc(sizeof(LNode); L-next=NULL; return 1;/链表插入int Lis
19、tInsert(LinkList &L,int i,ElemType e) LinkList p; p=L; int j=0; while(p&jnext; +j; if(!p|ji-1) return 0; LinkList s=(LinkList)malloc(sizeof(LNode); s-data=e; s-next=p-next; p-next=s; return 1;/链表删除int ListDelete_L(LinkList &L,int i,ElemType &e) LinkList p; p=L; int j=0; while(p-next&jnext; j+; if(!(
20、p-next)|ji-1) return 0; LinkList q=p-next; p-next=q-next; e=q-data; free(q); return 1;/链表显示void Disp_L(LinkList L) LinkList p=L-next; if(!p) printf(此链表为空!); while(p) printf(%d ,p-data); p=p-next; printf(n);/将带头结点的链表LA分解成LA、LB两个链表,/LA为数据域为奇数的结点,LB为数据域为偶数的结点,要求原地工作void sample(LinkList &La, LinkList &L
21、b) LinkList p,q,r; Lb = ( LinkList)malloc( sizeof( LNode); /生成Lb链表新头结点 r = Lb; p = La; while( p-next) q = p-next; if(q-data%2) p = p-next; /La中当前结点为奇数,继续处理下一个结点 else p-next = q-next; r-next=q; r=q; /La中当前结点为偶数,删除,插入Lb链尾 r-next = NULL; void main() LinkList LA,LB; InitList_L(LA); ListInsert(LA,1,3); L
22、istInsert(LA,2,4); ListInsert(LA,3,6); ListInsert(LA,4,7); ListInsert(LA,5,12); ListInsert(LA,6,13); ListInsert(LA,7,15); ListInsert(LA,8,8); Disp_L(LA); sample(LA,LB); printf(nsample后:n); Disp_L(LA); Disp_L(LB);实验内容与步骤:实现链表初始化、插入、删除算法,代码如下:#include #include typedef char ElemType;typedef struct LNod
23、e ElemType data; struct LNode *next;LNode,*LinkList;int InitList_L(LinkList &L) L= (LinkList)malloc(sizeof(LNode); L-next=NULL; return 1;int ListInsert(LinkList &L,int i,ElemType e) LinkList p; p=L; int j=0; while(p&jnext; +j; if(!p|ji-1) return 0; LinkList s=(LinkList)malloc(sizeof(LNode); s-data=e
24、; s-next=p-next; p-next=s; return 1;int ListDelete_L(LinkList &L,int i,ElemType &e) LinkList p; p=L; int j=0; while(p-next&jnext; j+; if(!(p-next)|ji-1) return 0; LinkList q=p-next; p-next=q-next; e=q-data; free(q); return 1;void Disp_L(LinkList L) LinkList p=L-next; if(!p) printf(此链表为空!); while(p)
25、printf(%c,p-data); p=p-next; printf(n);void main() LinkList L; ElemType e; InitList_L(L); Disp_L(L); ListInsert(L,1,A); ListInsert(L,2,B); ListInsert(L,3,C); ListInsert(L,1,X); Disp_L(L); ListDelete_L(L,2,e); printf(删除的元素是:%cn,e); Disp_L(L);实验指导与数据处理:实验结果:此链表为空! XABC删除的元素是:A XBC实验内容与步骤:掌握将一个链表删除得元素插
26、入到另一个链表的算法。要求完成链表的创建,实现将链表中删除的第i个元素起共k个元素插入到另一个链表的第j个元素之前算法,代码如下:#include #include typedef char ElemType;typedef struct LNode ElemType data; struct LNode *next;LNode,*LinkList;/链表的初始化int InitList_L(LinkList &L) L= (LinkList)malloc(sizeof(LNode); L-next=NULL; return 1;/链表插入int ListInsert(LinkList &L,
27、int i,ElemType e) LinkList p; p=L; int j=0; while(p&jnext; +j; if(!p|ji-1) return 0; LinkList s=(LinkList)malloc(sizeof(LNode); s-data=e; s-next=p-next; p-next=s; return 1;/链表删除int ListDelete_L(LinkList &L,int i,ElemType &e) LinkList p; p=L; int j=0; while(p-next&jnext; j+; if(!(p-next)|ji-1) return 0; LinkList q=p-next; p-next=q-next; e=q-data; free(q); return 1;/链表显示void Disp_L(LinkList L) LinkL
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1