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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构严蔚敏上机代码完整版.docx

1、数据结构严蔚敏上机代码完整版数据结构第一、二次上机:#include #include #include #define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2#define list_init_size 100 /线性表存储空间的初始分配量#define LISTINCREMENT 10 /线性表存储空间的分配增量typedef int Status;typedef int ElemType;typedef struct ElemType *elem; /

2、存储空间基址 int length; /当前长度 int listsize; /当前分配的存储容量(以sizeof(ElemType)为单位)SqList;Status InitList_Sq(SqList &L) /构造一个空的线性表L L.elem =(ElemType * )malloc(list_init_size*sizeof(ElemType); if(!L.elem )exit(OVERFLOW);/存储分配失败 L.length =0; /空表长度为0 L.listsize =list_init_size;/初始存储容量 return OK;/Initlist_SqStatus

3、 ListInsert_Sq(SqList &L,int i,ElemType e) /在顺序线性表L中第i个位置之前插入新的元素e, /i的合法值为1=i=ListLength_Sq(L)+1 ElemType *p,*q,*newbase; /定义指针 if(iL.length +1) return ERROR; /i值不合法 if(L.length =L.listsize ) /当前存储空间已满,增加分配 newbase=(ElemType * )realloc(L.elem ,(L.listsize +LISTINCREMENT)*sizeof(ElemType); if(!newba

4、se)exit(OVERFLOW); /存储分配失败 L.elem =newbase; /新基址 L.listsize +=LISTINCREMENT; /增加存储容量 q=&(L.elem i-1); /q为插入位置 for(p=&(L.elem L.length -1);p=q;-p) *(p+1)=*p; /插入位置及之后的元素右移 *q=e; /插入e +L.length ; /表长增1 return OK;/ListInsert_SqStatus ListDelete_Sq(SqList &L,int i,ElemType &e) /在顺序线性表L中删除第i个元素,并用e返回其值 /

5、i的合法值为1=i=ListLength_Sq(L) ElemType *p,*q; /定义指针 if(iL.length ) return ERROR; /i值不合法 p=&(L.elem i-1); /p为被删除元素的位置 e=*p; /被删除元素的值赋给e q=L.elem +L.length -1; /表尾元素的位置 for(+p;p=q;+p) *(p-1)=*p; /被删除元素之后的元素左移 -L.length ; /表长减1 return OK;/ListDelete_sqvoid display(SqList L) /定义for循环函数 int i; for(i=0;i=L.l

6、ength -1;i+) printf(%dn,L.elem i);int LocateElem_Sq(SqList L,ElemType e) /在顺序线性表L中查找第1个值与e满足compare()的元素的位序 /若找到,则返回其在L中的位序,否则返回0 ElemType *p; int i=1; /i的初值为第一个元素的位序 p=L.elem ; /p的初值为第一个元素的存储位置 while(i=L.length & *p+!=e) +i; if(i=L.length) return i; else return 0;/LocateElem_Sqvoid MergeList_Sq(SqL

7、ist La,SqList Lb,SqList &Lc ) /已知顺序线性表La和Lb的元素按值非递减排列 /归并La和Lb得到新的顺序线性表Lc,Lc的元素也按非递减排列 ElemType *pa,*pb,*pc,*pa_last,*pb_last; pa=La.elem ; pb=Lb.elem ; Lc.listsize =Lc.length =La.length +Lb.length ; pc=Lc.elem =(ElemType *)malloc(Lc.listsize *sizeof(ElemType); if(!Lc.elem )exit(OVERFLOW); /存储分配失败 p

8、a_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+; /插入La的剩余元素 while(pb=pb_last) *pc+=*pb+; /插入Lb的剩余元素/MergeList_Sqvoid main() /* SqList L;/定义线性表 InitList_Sq(L);/调用空表 /插入数据 ListInsert_Sq(L

9、,1,10); ListInsert_Sq(L,2,20); ListInsert_Sq(L,1,30); ListInsert_Sq(L,3,40); printf(插入后:n); display(L);/调用循环函数 ListInsert_Sq(L,3,100);/在L表第三个位置插入100 printf(插入后:n); display(L); ElemType e;/定义e ListDelete_Sq(L,3,e);/删除L表的第三个元素,用e表示 printf(删除后:n); display(L); printf(被删除元素:%dnnnn,e);*/ SqList La,Lb,Lc;

10、InitList_Sq(La); ListInsert_Sq(La,1,3); ListInsert_Sq(La,2,5); ListInsert_Sq(La,3,8); ListInsert_Sq(La,4,11); printf(La插入后:n); display(La); InitList_Sq(Lb); ListInsert_Sq(Lb,1,2); ListInsert_Sq(Lb,2,6); ListInsert_Sq(Lb,3,8); ListInsert_Sq(Lb,4,9); ListInsert_Sq(Lb,5,11); ListInsert_Sq(Lb,6,15); Lis

11、tInsert_Sq(Lb,7,20); printf(Lb插入后:n); display(Lb); MergeList_Sq(La,Lb,Lc); printf(归并后:n); display(Lc); printf(n); int a=LocateElem_Sq( Lc, 5); printf(%dn,a);第三次上机:#include #include #define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;type

12、def int ElemType;typedef struct LNode ElemType data; struct LNode *next;LNOde,*LinkList;Status GetElem_L(LinkList L,int i,ElemType &e) /L为带头结点的单链表的头指针 /当第i个元素存在时,其值赋给e并返回OK,否则返回ERROR LinkList p; p=L-next; int j=1; /初始化,p指向第一个结点,j为计数器 while(p&jnext; +j; if(!p|ji) return ERROR; /第i个元素不存在 e=p-data; /取第

13、i个元素 return OK;/GetElem_LStatus ListInsert_L(LinkList &L,int i,ElemType e) /在带头结点的单链线性表L中第i个位置之前插入元素e LinkList p,s; p=L; int j=0; while(p&jnext; +j; /寻找第i-1个结点 if(!p|ji-1) return ERROR; /i小于或者大于表长+1 s=(LinkList)malloc(sizeof(LNode); /生成新结点 s-data=e; s-next=p-next; /插入L中 p-next=s; return OK;/ListInse

14、rt_LStatus ListDelete_L(LinkList &L,int i,ElemType &e) /在带头结点的单链线性表L中,删除第i个元素,并由e返回其值 LinkList p,q; p=L; int j=0; while(p-next&jnext;+j; if(!(p-next)|ji-1) return ERROR; /删除位置不合理 q=p-next; p-next=q-next; /删除并释放结点 e=q-data; free(q); return OK;/ListDelete_Lvoid CreateList_L(LinkList &L,int n) /逆位序输入n个

15、元素的值,建立带表头结点的单链线性表L LinkList p; L=(LinkList)malloc(sizeof(LNode); L-next =NULL; /先建立一个带头结点的单链表 for(int i=n;i0;-i) p=(LinkList)malloc(sizeof(LNode); /生成新结点 scanf(%d,&p-data); /输入元素值 p-next=L-next ;L-next =p; /插入到表头 /CreateList_Lvoid display(LinkList L) LinkList p=L-next; /定义for循环函数 while(p) printf(%d

16、,p-data); p=p-next; printf(n);void main() LinkList L; CreateList_L(L,3); display(L); ListInsert_L(L,2,100); display(L); ElemType e; ListDelete_L(L,2,e); display(L); printf(被删除的值=%dn,e); GetElem_L(L,3,e); printf(获取的值=%dn,e);第四次上机#include #include #include #define TRUE 1#define FALSE 0#define OK 1#def

17、ine ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int SElemType;typedef int Status;#define STACK_INIT_SIZE 100 /存储空间初始分配量#define STRCKINCREMENT 10 /存储空间分配增量typedef structSElemType *base; /在栈构造之前和销毁之后,base的值为NULLSElemType *top; /栈顶指针int stacksize; /当前已分配的存储空间,以元素为单位SqStack;Status InitStack(S

18、qStack &S)/构造一个空栈S S.base =(SElemType *)malloc(STACK_INIT_SIZE * sizeof(SElemType); if(!S.base )exit(OVERFLOW); /存储分配失败 S.top =S.base ; S.stacksize =STACK_INIT_SIZE; return OK;/InitStackStatus GetTop(SqStack S,SElemType &e) /若栈不空,则用e返回S的栈顶元素,并返回OK;否则返回ERROR if(S.top =S.base ) return ERROR; e=*(S.top

19、 -1); return OK;/GetTopStatus Push(SqStack &S,SElemType e)/插入元素e为新的栈顶元素 if(S.top - S.base =S.stacksize )/栈满,追加存储空间 S.base =(SElemType * )realloc(S.base ,(S.stacksize +STRCKINCREMENT) * sizeof(SElemType); if(!S.base )exit(OVERFLOW); /存储分配失败 S.top =S.base +S.stacksize ; S.stacksize +=STRCKINCREMENT; *

20、S.top +=e; return OK;/PushStatus Pop(SqStack &S,SElemType &e)/若栈不空,则删除S的栈顶元素,用e返回其值,并返回OK;否则返回ERROR if(S.top =S.base )return ERROR; e=*-S.top ; return OK;/PopStatus StackEmpty(SqStack S) if(S.top=S.base) return TRUE; else return ERROR;void conversion()/对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数 SqStack S; int N

21、; SElemType e; InitStack(S); /构造空栈 scanf(%d,&N); while(N) Push(S,N % 8); N=N/8; printf(转换成八进制后的数为:); while(!StackEmpty(S) Pop(S,e); printf(%d,e); printf(n);/conversionvoid main() SqStack S; SElemType e,x; InitStack(S); Push(S,5); Push(S,4); Push(S,3); Push(S,2); Push(S,1); GetTop(S,e); printf(栈顶元素为%

22、dn,e); printf(n); Pop(S,x); printf(删除的栈顶元素为%dn,x); printf(n); printf(输入一个十进制数:); conversion();第五次上机/*队列的链式存储*/#include #include #include #define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int QElemType;typedef int Status;typedef struct QNode QElem

23、Type data; struct QNode *next;QNode,*QueuePtr;typedef struct QueuePtr front; /队头指针 QueuePtr rear; /队尾指针LinkQueue;Status InitQueue(LinkQueue &Q) /构造一个空队列Q Q.front =Q.rear =(QueuePtr)malloc(sizeof(QNode); if(!Q.front )exit(OVERFLOW); /存储分配失败 Q.front -next =NULL; return OK;Status DestroyQueue(LinkQueue

24、 &Q) /销毁队列Q while(Q.front ) Q.rear =Q.front -next ; free(Q.front ); Q.front =Q.rear ; return OK;Status EnQueue(LinkQueue &Q,QElemType e) /插入元素e为Q的新的队尾元素 QueuePtr p; 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 DeQ

25、ueue(LinkQueue &Q,QElemType &e) /若队列不为空,则删除Q的队头元素,用e返回其值,并返回OK; /否则返回ERROR QueuePtr p; if(Q.front =Q.rear )return ERROR; p=Q.front -next ; e=p-data; Q.front -next =p-next; if(Q.rear =p) Q.rear =Q.front ; free(p); return OK;void disp(LinkQueue Q) QueuePtr p; p=Q.front-next; /定义for 循环函数 while(p) print

26、f(%d ,p-data); p=p-next; printf(n);void main() LinkQueue Q; QElemType e; InitQueue(Q); printf(插入的元素为:n); EnQueue(Q,25); EnQueue(Q,5); EnQueue(Q,12); EnQueue(Q,60); EnQueue(Q,33); disp(Q); printf(删除队头元素后:n); DeQueue(Q,e); disp(Q); DestroyQueue(Q); if(DestroyQueue(Q)=1) printf(销毁队列成功!n); else printf(销

27、毁队列失败!n);附加:/*队列的顺序存储*/#define MAXQSIZE 100 /最大队列长度typedef struct QElemType *base /初始化的动态分配存储空间 int front; /头指针,若队列不空,指向队列头元素 int rear; /尾指针,若队列不空,指向队列尾元素的下一个位置SqQueue;Status InitQueue(SqQueue &Q) /构造一个空队列 Q.base =(QElemType *)malloc(MAXQSIZE * sizeof(QElemType); if(!Q.base )exit(OVERFLOW); /存储分配失败 Q.front =Q.rear =0; return OK;int QueueLenth(SqQueue Q) /返回Q的元素个数,即队列的长度 return(Q.rear -Q.front +MAXQSIZE)%MAXQSIZE;Status EnQueue(SqQueue &Q,QElemType e) /插入元素e为Q的新的队尾元素 if(Q.rear +1) % MAXQSIZE =Q.front) return ERROR; /队列满 Q.base Q.rear =e; Q.rear =(Q.rear +1) % MAXQSIZE; return OK;

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

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