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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

顺序表及链表的应用.docx

1、顺序表及链表的应用设计一 顺序表的应用代码Head.h#define LIST_INIT_SIZE 100/线性表存储空间的初始分配量#define LISTINCREMENT 10/线性表存储空间的分配增量#define STACK_INIT_SIZE 100/栈存储空间初始分配量#define STACKINCREMENT 10/栈存储空间分配增量#define MAXQSIZE 10/最大队列长度typedef int ElemType;typedef char SElemType;typedef int QElemType;typedef struct int *elem;/存储空间基

2、址 int length;/当前长度 int listsize;/当前分配的存储容量SqList;typedef struct SElemType *base;/在栈构造之前和销毁之后,base的值为null SElemType *top;/栈顶指针 int stacksize;/当前已分配的存储空间,以元素为单位SqStack;typedef struct QElemType *base;/初始化的动态分配存储空间 int front;/头指针,若队列不空,指向队列头元素 int rear;/尾指针,若队列不空,指向队列尾元素的下一个位置SqQueue;void Check1();void

3、Check2();void Check3();void Check4();int InitList_Sq(SqList *L);int CreateList(SqList *L);int DeleteElem_Sq(SqList *L);int PrintElem(SqList L);int DeleteElem_1(SqList *L);int DevideList_Sq(SqList L,SqList *La,SqList *Lb);int InitStack(SqStack *L);int Push(SqStack *S,SElemType e);int StackEmpty(SqSta

4、ck S);int GetTop(SqStack S,SElemType *e);int Pop(SqStack *S,SElemType *e);int Correct(char exp, int n);int InitQueue(SqQueue *Q);int CreateQueue(SqQueue *Q);int PrintQueue(SqQueue Q);int EnQueue(SqQueue *Q,QElemType e);int DeQueue(SqQueue *Q,QElemType *e);.main.cpp#include#include head.h#includestdl

5、ib.h#include void main() int choice; do printf(n 顺序表的应用 n); printf(n -主菜单- n); printf( (1) 删除线性表中值为item的元素 n); printf( (2) 将一个顺序表分拆成两个顺序表 n); printf( (3) 判断括弧是否匹对 n); printf( (4) 循环队列中插入和取出节点 n); printf( (0) 退出系统 n); printf(n请选择操作步骤:); scanf(%d,&choice); if(choice4) continue; switch(choice) case 1:C

6、heck1();break; case 2:Check2();break; case 3:Check3();break; case 4:Check4();break; case 0:exit(0); default:break; while(1);.Check1.cpp#include head.h#include void Check1() SqList L1; printf(实现删除线性表中值为item的元素的算法:n); CreateList(&L1);/实现第一个算法 PrintElem(L1); DeleteElem_1(&L1); PrintElem(L1);CreateList.

7、cpp#includehead.h#includestdio.h#includestdlib.h/创建顺序表,在顺序表中输入数据元素。int CreateList(SqList *L) int i,n; if(!InitList_Sq(L)exit(-1); printf(请输入顺序表的长度:); scanf(%d,&n); (*L).length=n; ElemType *p=(*L).elem; printf(请输入顺序表的数据元素:); for(i=0;in;i+) scanf(%d,p); p+; return 1;PrintElem.cpp#include head.h#includ

8、e int PrintElem(SqList L) if(L.length=0)printf(Empty!n); int i; for(i=0;iL.length;i+) printf(%4d,L.elemi); printf(n); return 1;DeleteElem_1.cpp#include head.h#includeint DeleteElem_1(SqList *L) int *p,*q,item; printf(请输入要删去的元素:); scanf(%d,&item); p=(*L).elem; q=(*L).elem+(*L).length-1; while(pq) if(

9、*p=item) *p=*q; q-; (*L).length-; else p+; if(*p=item)(*L).length-; return 1;.Check2().cpp#include head.h#include void Check2() SqList L2,La,Lb; printf(实现将一个顺序表分拆成两个顺序表的算法:n); CreateList(&L2);/实现第二个算法 PrintElem(L2); DevideList_Sq(L2,&La,&Lb); PrintElem(La); PrintElem(Lb);DevideList_Sq.cpp#include he

10、ad.hint DevideList_Sq(SqList L,SqList *La,SqList *Lb) InitList_Sq(La);InitList_Sq(Lb); (*La).length=(*La).length=0; int *p,*q; p=L.elem; q=L.elem+L.length-1; for(;p0)(*La).elem(*La).length+=*p; else (*Lb).elem(*Lb).length+=*p; return 1;InitList_Sq.cpp#include head.h#include /构造一个空的线性表int InitList_Sq

11、(SqList *L) (*L).elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType); if(!(*L).elem)exit(-1);/存储分配失败 (*L).length=0;/空表长度为0 (*L).listsize=LIST_INIT_SIZE;/初始存储容量 return 1;.Check3().cpp#include head.h#include #includevoid Check3() printf(实现判断括弧是否匹对的算法:n); char a20;/实现第三个算法 int tag; printf(Input Str

12、ing:); scanf(%s,a); tag=Correct(a,strlen(a); if(tag) printf(correct!n); else printf(wrong!n); Correct.cpp#include head.hint Correct(char exp, int n) SqStack S; InitStack(&S); char *p=exp,e,x; int i; for(i=0;in;i+,p+) if(*p=(|*p=|*p=)Push(&S,*p); else if(*p=)|*p=|*p=) GetTop(S,&e); switch(*p) case ):

13、if(e=()Pop(&S,&x);else return 0;break; case :if(e=)Pop(&S,&x);else return 0;break; case :if(e=)Pop(&S,&x);else return 0;break; if(!StackEmpty(S)return 0; else return 1;GetTop.cpp#include head.hint GetTop(SqStack S,SElemType *e)/若栈不空,则用e返回S的栈顶元素,并返回1,否则返回0 if(S.top=S.base)return 0; else *e=*(S.top-1)

14、; return 1;InitStack.cpp#include#include head.h/构造一个空栈int InitStack(SqStack *S) (*S).base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType); if(!(*S).base)exit(-1);/存储分配失败 (*S).top=(*S).base; (*S).stacksize=STACK_INIT_SIZE; return 1;Pop.cpp#include head.hint Pop(SqStack *S,SElemType *e)/若栈不空,则删除

15、S的栈顶元素,用e返回其值,并返回1,否则返回0 if(StackEmpty(*S)return 0; *e=*(-(*S).top); return 1;Push.cpp#include#include head.hint Push(SqStack *S,SElemType e)/插入元素e为新的栈顶元素 if(*S).top-(*S).base=(*S).stacksize)/栈满,追加存储空间 (*S).base=(SElemType *)realloc(*S).base,(*S).stacksize+STACKINCREMENT)*sizeof(SElemType); if(!(*S)

16、.base)exit(-1);/存储分配失败 (*S).stacksize+=STACKINCREMENT; *(*S).top+)=e; return 1;StackEmpty.cpp#include head.hint StackEmpty(SqStack S) if(S.top=S.base)return 1; else return 0;.Check4().cpp#include head.h#include void Check4() printf(实现循环队列中插入和取出节点的算法:n); SqQueue Q;/实现第四个算法 QElemType e; CreateQueue(&Q

17、); printf(请输入插入的节点:); scanf(%d,&e); PrintQueue(Q); EnQueue(&Q,e); PrintQueue(Q); DeQueue(&Q,&e); PrintQueue(Q);CreateQueue.cpp#include#include head.h/创建一个队列int (SqQueue *Q) int n,i; InitQueue(Q); printf(输入队列的长度 :); scanf(%d,&n); if(nMAXQSIZE)printf(overflow!n);return 0; for(i=0;in-1;i+) scanf(%d,(*Q

18、).base)+i); (*Q).rear=n-1; return 1;DeQueue.cpp#include head.h#includeint DeQueue(SqQueue *Q,QElemType *e)/若队列不空,则删除Q的队头元素,用e返回其值,并返回1,否则返回0 if(*Q).front=(*Q).rear)printf(The Queue is empty!);return 0; *e=(*Q).base(*Q).front; (*Q).front=(*Q).front+1)%MAXQSIZE; return 1;EnQueue.cpp#include#include he

19、ad.hint EnQueue(SqQueue *Q,QElemType e)/插入元素e为新的队尾元素 if(*Q).rear+1)%MAXQSIZE=(*Q).front)printf(overflow!n);return 0;/队列满 (*Q).base)(*Q).rear=e; (*Q).rear=(*Q).rear+1)%MAXQSIZE; return 1;InitQueue.cpp#include head.h#include /构造一个空队列int InitQueue(SqQueue *Q) (*Q).base=(QElemType *)malloc(MAXQSIZE*size

20、of(QElemType); if(!(*Q).base)exit(-1);/存储空间分配失败 (*Q).front=(*Q).rear=0; return 1;PrintQueue.cpp#include head.h#includeint PrintQueue(SqQueue Q) if(Q.front=Q.rear)printf(empty!);return 0; int i,n; QElemType *p; n=(Q.rear-Q.front+MAXQSIZE)%MAXQSIZE; p=&(Q.base)Q.front; for(i=0;in;i+) printf(%4d,*p); i

21、f(p=&Q.baseMAXQSIZE-1)p=Q.base; else p+; printf(n); return 1;.设计二链表的应用代码Head.htypedef int ElemType;typedef struct LNode/线性表的单链表存储结构 ElemType data; struct LNode *next;LNode,*LinkList;typedef struct DuLNode /线性表的双向链表存储结构 ElemType data; struct DuLNode *prior; struct DuLNode *next; int freq;DulNode,*DuL

22、inkList;void CreateList_L(LinkList *L,int n);int PrintLinkList(LinkList L);int EqualLinkList(LinkList *La,LinkList *Lb);void CreatCircularLinkList(LinkList *L,int n);int MonkeyKing(LinkList L,int n);int LinkListLength_Dul(DuLinkList L);int CreateLinkList_Dul(DuLinkList *L,int n);int PrintLinkList_Du

23、l(DuLinkList L);int Locate(DuLinkList *L,ElemType e);/int InterSection(LinkList La,LinkList Lb,LinkList *Lc);void Check_1();void Check_2();void Check_3();.main.cpp#include#include head.h#includevoid main() int choice; do printf(n 链表的应用 n); printf(n -主菜单- n); printf( (1) 删除两个递增链表中不同的元素 n); printf( (2

24、) 猴子选大王 n); printf( (3) 实现locate函数 n); printf( (0) 退出系统. n); printf(n请选择操作步骤:); scanf(%d,&choice); if(choice3) continue; switch(choice) case 1:Check_1();break; case 2:Check_2();break; case 3:Check_3();break; case 0:exit(0); default:break; while(1);.Check_1.cpp#include head.h#include void Check_1() L

25、inkList La,Lb; int n1,n2; printf(请输入单链表La的长度:); scanf(%d,&n1); printf(请按逆位序输入:n); CreateList_L(&La,n1); printf(La:); PrintLinkList(La); printf(请输入单链表Lb的长度::); scanf(%d,&n2); printf(请按逆位序输入:n); CreateList_L(&Lb,n2); printf(Lb:); PrintLinkList(Lb); EqualLinkList(&La,&Lb); printf(删除元素以后 n); printf(La:)

26、; PrintLinkList(La); printf(Lb:); PrintLinkList(Lb);CreateList_L.cpp#include#include head.h#includevoid CreateList_L(LinkList *L,int n)/逆位序输入n个元素的值,建立带表头结点的单性线性表L int i; LinkList p; *L=(LinkList)malloc(sizeof(LNode); (*L)-next=NULL;/先建立一个带头结点的单链表 for(i=n;i0;-i) p=(LinkList)malloc(sizeof(LNode);/生成新结点 scanf(%d,&(p-data);/输入元素值 p-next=(*L)-next; (*

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

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