数据结构作业答案(大连理工大学)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
作业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 -2
typedef int Status;
typedef int ElemType;
typedef struct
{ ElemType *elem;
int length;
int listsize;
}SqList;
立单链表");
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请选择操作:");
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("元素值为:%d\n",e);
break;
case '3': printf("请输入要查找的元素:");
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("删除成功!");
else
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.若进栈序列为ABCD,请写出全部可能的出栈序列和不可能的出栈序列。参考答案:
可能的出栈序列:(14种)
dcba cdba bacd cbda adcb cbad bdca acdb bcda acbd bcad abdc badc abcd
不可能的出栈序列:(10种)
d bca dbac dabc dacb dcab cabd cdab bdac cadb adbc
2.简要说明循环队列如何判断队满和队空
参考答案:
当牺牲一个存储结点,约定以“队列头指针在队列尾指针的下一位置(指环状的下一个位置)上” 作为队列“满”状态的标志时,循环队列判断队满的条件为:(rear+1) % MaxQsize==front;判断队空的条件为:front == rear。
3.设A为n阶对称矩阵,采用压缩存储存放于一维数组F[n(n+1)/2]中(从F[0]开始存放),请分别给出存放上三角阵时任一矩阵元素a ij(1≤i,j≤n)的地
址计算公式和存放下三角阵时任一矩阵元素a ij(1≤i,j≤n)的地址计算公式。参考答案:
存放上三角阵时,任一矩阵元素a ij(1≤i,j≤n)的地址计算公式为:
(
)
()
ij11
-1
Loc(a)=Loc(a)+1*
2
i i
j l
⨯
⎡⎤
+-
⎢⎥
⎣⎦
存放下三角阵时,任一矩阵元素a ij(1≤i,j≤n)的地址计算公式为:
()
()
ij11
-1
Loc(a)=Loc(a)+1*
2
j j
i l
⨯
⎡⎤
+-
⎢⎥
⎣⎦
4.写出下面稀疏矩阵的三元组顺序表和十字链表表示。
参考答案:
400000
503008
000000
000700
200000
A
⎡⎤
⎢⎥
⎢⎥
⎢⎥
=
⎢⎥
⎢⎥
⎢⎥
⎣⎦