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

加入VIP,免费下载
 

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

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

下载须知

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

版权提示 | 免责声明

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

数据结构作业答案大连理工大学.docx

1、数据结构作业答案大连理工大学作业1. 线性表 编程作业:1 将顺序表逆置,要求用最少的附加空间。参考答案#include #include #include #define LIST_INIT_SIZE 100 #define LISTINCREMENT 10 #define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typedef int ElemType;typedef struct ElemType *elem; in

2、t length; int listsize; SqList;/创建空顺序表Status InitList_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;/顺序表在第i个元素之前插入eStatus sxbcr(SqList &L, int i, ElemType e) ElemType *p,*q; if(iL.length

3、+1) return (ERROR); else q=&(L.elemi-1); for(p=&(L.elemL.length-1);p=q;-p) *(p+1)=*p; *q=e; +L.length; return (OK); /顺序表显示void xsList(SqList L) int i=L.length,k; for(k=0;ki;k+) printf(%d ,L.elemk); printf(n);/顺序表逆置void nizhi(SqList &L) int i=0,j=L.length-1; ElemType temp; for(;i10-20-30-40);(3) Inse

4、rtList():在有序单链表中插入元素x;(4) ReverseList():单链表就地逆置;(5) DelList():在有序单链表中删除所有值大于mink且小于maxk的元素。选作:使用文本菜单完成功能选择及执行。参考答案:#include#include#include#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2typedef int Status;typedef int ElemType;typedef struct node ElemT

5、ype data; struct node *link;Lnode, *LinkList;/头插法建立单链表void Create_L1(LinkList &L, int n) LinkList p; int i; L=(LinkList)malloc(sizeof(Lnode); L-link = NULL; for (i = n; i 0; -i) p=(LinkList)malloc(sizeof(Lnode); scanf(%d,&p-data); p- link = L- link; L- link = p; /尾插法建立单链表void Create_L2(LinkList &L,i

6、nt n) LinkList s, p; int i; L=(LinkList)malloc(sizeof(Lnode); L-data=0; L-link=NULL; p=L; for(i=1;idata); s-link=NULL; p-link=s; p=s; /查找是否存在结点eLinkList dlbcz(LinkList L, ElemType e) LinkList p=L-link; while(p!=NULL & p-data!=e) p=p-link; return (p);/在第i个元素之前插入结点eStatus ListInsert_L(LinkList L, int

7、i, ElemType e) LinkList p = L,s; int j = 0; while (p & j link; +j; if (!p | j i-1) return ERROR; s = (LinkList) malloc ( sizeof (Lnode); s-data = e; s-link = p-link; p-link = s; return OK;/删除第i个结点Status ListDelete_L(LinkList L, int i, ElemType &e) LinkList p = L,q; int j = 0; while (p-link & j link;

8、 +j; if (!(p-link) | j i-1) return ERROR; q=p-link; p-link=q-link; e=q-data; free(q); return OK;/求第i个元素值Status GetElem_L(LinkList L, int i, ElemType &e) int j=1; LinkList p=L-link; while(p&jlink; j+; if(!p|ji) return ERROR; e=p-data; return OK;/显示单链表中元素void xsList(LinkList L) LinkList p=L-link; whil

9、e(p) printf(%d ,p-data); p=p-link; /删除大于mink且小于maxk的元素void DelList(LinkList &L, ElemType mink, ElemType maxk) LinkList p=L,q; while(p-link&p-link-datalink; q=p; while(q&q-datalink; p-link=q;/就地升序排序void sh_sort(LinkList &L) LinkList p=L-link,pre=L,q=L-link-link,u; p-link=NULL; while(q) p=L-link; pre=

10、L; while(p&p-datadata) pre=p; p=p-link; u=q-link; pre-link=q; q-link=p; q=u; /就地逆置void nizhi(LinkList &L) LinkList p=L-link,q=L-link-link,u; p-link=NULL; while(q) u=q-link; q-link=L-link; L-link=q; q=u; /有序表插入void yxcharu(LinkList &L, ElemType e) LinkList pre,p,s; pre=L; p=L-link; while(p&p-datalink

11、; s=(LinkList)malloc(sizeof(Lnode); s-data=e; s-link=p; pre-link=s;main() LinkList L; int n,i,mink,maxk; ElemType e; char choice=0; while(choice!=q) printf(n*n); printf(1.建立单链表 ); printf(2.取元素值 ); printf(3.查找 n); printf(4.插入 ); printf(5.删除 ); printf(6.显示n); printf(7.删除大于mink且小于maxk的元素值 ); printf(8.就

12、地升序排序n); printf(9.就地逆置 ); printf(a.有序表插入 ); printf(q.退出n); printf(n请选择操作:); fflush(stdin); scanf(%c,&choice); switch(choice) case 1: printf(请输入单链表中结点个数:); scanf(%d,&n); Create_L2(L,n); break; case 2: printf(请输入元素位序:); scanf(%d,&i); GetElem_L(L,i,e); printf(元素值为:%dn,e); break; case 3: printf(请输入要查找的元

13、素:); scanf(%d,&e); if(dlbcz(L,e) printf(查找成功!); else printf(查找失败。); break; case 4: printf(请输入插入位置:); scanf(%d,&i); printf(请输入要插入的元素:); scanf(%d,&e); if(ListInsert_L(L,i,e) printf(插入成功!单链表为:); else printf(插入失败。); break; case 5: printf(请输入删除位置:); scanf(%d,&i); if(ListDelete_L(L,i,e) printf(删除成功!); els

14、e printf(删除失败。n); break; case 6: printf(n单链表为:); xsList(L); break; case 7: printf(请输入mink和maxk:); scanf(%d,%d,&mink,&maxk); DelList(L,mink,maxk); break; case 8: sh_sort(L); break; case 9: nizhi(L); break; case a: printf(请输入在有序表中插入的元素值:); scanf(%d,&e); yxcharu(L,e); break; 作业2. 栈、队列、数组 非编程作业:1 若进栈序列为

15、ABCD,请写出全部可能的出栈序列和不可能的出栈序列。参考答案:可能的出栈序列:(14种) dcba cdba bacd cbda adcb cbad bdca acdb bcda acbd bcad abdc badc abcd 不可能的出栈序列:(10种) dbca dbac dabc dacb dcab cabd cdab bdac cadb adbc 2 简要说明循环队列如何判断队满和队空?参考答案:当牺牲一个存储结点,约定以“队列头指针在队列尾指针的下一位置(指环状的下一个位置)上” 作为队列“满”状态的标志时,循环队列判断队满的条件为:(rear+1) % MaxQsize=fro

16、nt;判断队空的条件为:front = rear。3 设A为n阶对称矩阵,采用压缩存储存放于一维数组Fn(n+1)/2中(从F0开始存放),请分别给出存放上三角阵时任一矩阵元素aij(1i,jn)的地址计算公式和存放下三角阵时任一矩阵元素aij(1i,jn)的地址计算公式。参考答案:存放上三角阵时,任一矩阵元素aij(1i,jn)的地址计算公式为:存放下三角阵时,任一矩阵元素aij(1i,jn)的地址计算公式为:4 写出下面稀疏矩阵的三元组顺序表和十字链表表示。参考答案: 编程作业栈采用顺序栈存储,试设计算法实现将表达式转换成后缀表达式输出。例如,输入表达式: a+b/c-(d*e+f)*g

17、输出其后缀表达式:abc/+de*f+g*- 参考答案:#include #include #include #define OVERFLOW -2#define OK 1#define ERROR 0#define STACK_INIT_SIZE 100 #define STACKINCREMENT 10 typedef int Status;typedef char SElemType; typedef char string80; typedef struct SElemType *base; SElemType *top; int stacksize; SqStack; Status

18、InitStack(SqStack &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);Status ClearStack(SqStack &S) S.base=(SElemType*)realloc(S.base,STACK_INIT_SIZE *sizeof(SElemType); if(!S.base) exit(OVERFLOW); S.top=

19、S.base; S.stacksize=STACK_INIT_SIZE; return(OK);void DestroyStack(SqStack &S) S.stacksize=0; if(S.base) free(S.base); S.base=S.top=NULL;Status StackEmpty(SqStack S) if(S.top=S.base) return true; else return false;SElemType GetTop(SqStack S) SElemType e; if(S.topS.base) e=*(S.top-1); return e;Status

20、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) exit(OVERFLOW); S.top=S.base+ S.stacksize; S.stacksize+=STACKINCREMENT; *S.top+=e; return OK;Status Pop(SqStack &S, SElemType &e) if(S.top

21、 = S.base) /栈空 return ERROR; e =*-S.top; return OK;Status InOP(SElemType c) char Operators=+,-,*,/,(,),#,0; int len=strlen(Operators); for(int i=0;i; break; case (: case #: order=; break; break; case *: case /: switch(curtop) case +: case -: case (: case #: order=; break; break; case (: switch(curto

22、p) case +: order=; break; case -: order=; break; case *: order=; break; case /: order=; break; case (: order=; break; case #: order=; break; case -: order=; break; case *: order=; break; case /: order=; break; case (: order=; break; case ): order=; break; break; case #: switch(curtop) case +: order=; break; case -: order=; break; case *: order=; break; case /: order=; break; case ): order=; break; case #: order=; break; break; return order;void Pass( string Suffix, SElemType ch) *Suffix=ch;

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

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