数据结构作业答案(大连理工大学)(共31页).doc
《数据结构作业答案(大连理工大学)(共31页).doc》由会员分享,可在线阅读,更多相关《数据结构作业答案(大连理工大学)(共31页).doc(31页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、精选优质文档-倾情为你奉上作业1. 线性表l 编程作业: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) InsertList(
4、):在有序单链表中插入元素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 ElemType dat
5、a; 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,int n) L
6、inkList 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 i, ElemTyp
7、e 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; +j; if (!(
8、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;while(p)printf(%d
9、 ,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=L;while(p&p-datadata)pre=p
10、;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;s=(LinkList)malloc(sizeof(Lnode);s-data=e;s-l
11、ink=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.就地升序排序n);printf(9.就地逆置 );printf(a.有序表插入 );printf(q.退出n);printf(n
12、请选择操作:);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(请输入要查找的元素:); scanf(%d,&e); if(dlbcz(L,e) printf(查找成功!); else printf(查找失败。); break
13、;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(删除成功!); else printf(删除失败。n); break;case 6: printf(n单链表为:); xsList(L); break;case 7: pr
14、intf(请输入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. 栈、队列、数组l 非编程作业:1 若进栈序列为ABCD,请写出全部可能的出栈序列和不可能的出栈序列。参考答案:可能的出栈序列:(14种) dcba cdba bacd cbda adcb cbad bdca
15、 acdb bcda acbd bcad abdc badc abcd 不可能的出栈序列:(10种)dbca dbac dabc dacb dcab cabd cdab bdac cadb adbc 2 简要说明循环队列如何判断队满和队空?参考答案:当牺牲一个存储结点,约定以“队列头指针在队列尾指针的下一位置(指环状的下一个位置)上” 作为队列“满”状态的标志时,循环队列判断队满的条件为:(rear+1) % MaxQsize=front;判断队空的条件为:front = rear。3 设A为n阶对称矩阵,采用压缩存储存放于一维数组Fn(n+1)/2中(从F0开始存放),请分别给出存放上三角阵
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 作业 答案 大连理工大学 31
限制150内