数据结构作业辅导

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

作业辅导:第二章 线性表 作业辅导:
du_del( Lnode s){ ( ) p=s; do{ pre=p; p=p->next; } while(p->next!=s) ; pre->next=s; free(p); }
作业辅导:第三章 栈和队列 作业辅导:
1、顺序队列一般应该组织成为 、 循环队列的形式, 循环队列的形式,而且一般队 列头或尾其中之一虚指一位, 列头或尾其中之一虚指一位, 满队列时实际上数组中还有一 个空闲位置。 个空闲位置。请分析这样设置 的理由。 的理由。
作业辅导: 作业辅导:第三章 栈和队列
else { //空队列 空队列 Q.front=q; q->next=Q.front; }
作业辅导: 作业辅导:第三章 栈和队列
出队列(只设头指针): 出队列(只设头指针): q=p=Q.front; if(p) { //非空队列 //非空队列 if(p->next==q) //队列只有一个元素 队列只有一个元素 Q.front=NULL; else {
出队: Q.rear指向队尾元素 出队:设Q.rear指向队尾元素 if(quelen!=0) //队列非空 队列非空 { front=(Q.rear+ MAXSIZEquelen)%MAXSIZE; quelen--; return(front); }
作业辅导:第五章 数组 作业辅导:
1、假定有下列n*n矩阵(n为奇数) 假定有下列n*n矩阵( 为奇数) n*n矩阵 a11 0 A= . . . an1 an1 0 a22 …. 0 . …. …. a2,n-1 ,na1n 0 . . . ann
作业辅导: 作业辅导:第三章 栈和队列
while(p->next!=q) //查找尾节点 //查找尾节点 p=p->next; P->next=q->next; Q.front=q->next; //出队 //出队 } //else free(q);
作业辅导: 作业辅导:第三章 栈和队列
3、假设循环队列只设rear和 假设循环队列只设rear和 rear quelen来分别指示队尾元素的位 quelen来分别指示队尾元素的位 置和队中元素的个数, 置和队中元素的个数,试给出判断 此循环队列的队满条件, 此循环队列的队满条件,并写出相 应的入队和出队算法,要求出队时 应的入队和出队算法, 需返回队头指针。 需返回队头指针。
作业辅导: 作业辅导:第三章 栈和队列
2、设长度为n的链队列用单循环 设长度为n 链表表示,若只设头指针, 链表表示,若只设头指针,则怎 样进行入队和出队操作; 样进行入队和出队操作;若只设 尾指针呢? 尾指针呢?
作业辅导: 作业辅导:第三章 栈和队列
q入队列(只设头指针): 入队列(只设头指针): P=Q.front; //非空队列 if(p) { //非空队列 while(p->next!=Q.front){ p=p->next; //查找尾节点 //查找尾节点 q->next=Q.front; p->next=q; //插入 //插入 }
作业辅导:第三章 栈和队列 作业辅导:
2、队列可以用循环单链表来实 、 现,故可以只设置一个头指针 或者只设置一个尾指针。 或者只设置一个尾指针。请分 析对于循环单链表实现的队列, 析对于循环单链表实现的队列, 用那种方案更合适。 用那种方案更合适。
作业辅导:第三章 栈和队列 作业辅导:
1、若按课本中图3.1(b)所示铁 、若按课本中图3.1(b)所示铁 3.1(b) 道进行车厢调度(注意: 道进行车厢调度(注意:两侧 铁道均为单向行驶道) 请问: 铁道均为单向行驶道),请问: (1)如果进站的车厢序列为 123, 123,则可能得到的出站车厢 序列是什么? 序列是什么?
栈第三章栈和队列2如果进站的车厢序列为123456则能否得到435612和如果进站的车厢序列为123456则能否得到435612和的并135426的出站序列并请说明为什么不能得到或者如何得到即写出以s表示进栈和以x表示出栈的栈操作序列什么不能得到或者如何得到即写出以s表示进栈和以x表示出栈的栈操作序列作业辅导
0
…. .
0
作业辅导:第五章 数组 作业辅导:
如果用一维数组B 按行主序压缩存储A 如果用一维数组 B 按行主序压缩存储 A 的非 零元素, 零元素,问 1)A中非零元素的行下标与 列下标的关系; 列下标的关系; 给出A 中非零元素a 的下标( i,j) 2 ) 给出 A 中非零元素 aij 的下标 ( i,j ) 与 B 中的下标R的关系; 中的下标R的关系; 假定矩阵中每个元素占一个存储单元, 3 ) 假定矩阵中每个元素占一个存储单元 , 的起始地址为A 给出利用aij aij的下标 且B的起始地址为A0,给出利用aij的下标 i,j)定位在B中的位置公式。 (i,j)定位在B中的位置公式。
作业辅导:第二章 线性表 作业辅导:
(2)若线性表的总数基本固定,且 若线性表的总数基本固定, 很少进行插入和删除, 很少进行插入和删除,但要求以最 快的速度存取线性表中的元素, 快的速度存取线性表中的元素,在 此情况下,应选用那种存储结构? 此情况下,应选用那种存储结构? 为什么? 为什么?
作业辅导:第二章 线性表 作业辅导:
作业辅导:第二章 线性表 作业辅导:
P->next=NULL; for(i=4;i>=1;i--) InsertList (L,i+1,i*2); for(i=1;i<=3;i++) DeleteList (L,i);
作业辅导:第二章 线性表 作业辅导:
4、对于线性表的两种存储结构: 对于线性表的两种存储结构: (1)如果有n个线性表同时共存, 如果有n个线性表同时共存, 并且在处理过程中各表的长度会动 态的发生变化, 态的发生变化,线性表的总数也会 自动的改变。在此情况下, 自动的改变。在此情况下,应选用 那种存储结构?为什么? 那种存储结构?为什么?
作业辅导:第二章 线性表 作业辅导:
while(p && p->data<maxk) { q=p ; pre->next=p->next; p=p->next; free(q); } }
作业辅导:第二章 线性表 作业辅导:
2.已知A 2.已知A、B和C为三个递增有序的 已知 线性表,要求对A表作如下操作: 线性表,要求对A表作如下操作: 删去那些即在B表中出现又在C表 删去那些即在B表中出现又在C 中出现的元素。 中出现的元素。试对顺序表编写实 现上述操作的算法。 现上述操作的算法。
作业辅导:第二章 线性表 作业辅导:
3、画出执行下列各语句后各指 、 针及链表的示意图。 针及链表的示意图。 L=(LinkList)malloc(sizeof(L node)); P=L;
作业辅导:第二章 线性表 作业辅导:
for(i=1;i<=4;i++){ p->next=(LinkList) malloc(sizeof(Lnode)); p=p->next; P->data=i*2-1;}
作业辅导:第二章 线性表 作业辅导:
doulink(s:dLinkList){ //非空表 非空表 p=s; do{ q=p->next; q->pre=p; p=q; } while(p!=s); }
作业辅导:第二章 线性表 作业辅导:
1.已知线性表中的元素以值递增有序排 1.已知线性写一 高效的算法, 高效的算法,删除表中所有值大于 mink且小于maxk的元素 且小于maxk的元素( mink且小于maxk的元素(若表中存 在这样的元素), ),同时释放被删节点 在这样的元素),同时释放被删节点 空间(注意:mink和maxk是给定的 空间(注意:mink和maxk是给定的 两个参变量, 两个参变量,他们的值可以和表中的 元素相同,也可以不同) 元素相同,也可以不同)
作业辅导:第五章 数组 作业辅导:
主对角线: 1) 主对角线:i==j 次对角线: 次对角线:i+j==n+1 2)2(i-1) i=j ) 2(i-1)+1 i<j 2(i-1)-1 i>j 3) A0+2(i-1) i=j A0+2(i-1)+1 i<j A0+2(i-1)-1 i>j
作业辅导:第二章 线性表 作业辅导:
3.试用单链表实现上述的算法, 3.试用单链表实现上述的算法,并释 试用单链表实现上述的算法 表中的无用结点。 放A表中的无用结点。
作业辅导:第二章 线性表 作业辅导:
4.假设有一个循环链表的长度大于1 4.假设有一个循环链表的长度大于1, 假设有一个循环链表的长度大于 且表中既无头结点也无头指针。 且表中既无头结点也无头指针。已 为指向链表中某结点的指针, 知s为指向链表中某结点的指针, 试编写算法在链表中删除指针s 试编写算法在链表中删除指针s所 指结点的前驱结点。 指结点的前驱结点。
作业辅导:第二章 线性表 作业辅导:
1、在一个长度为n的顺序表中, 在一个长度为n的顺序表中, 删除第i个元素( n删除第i个元素(0≤i ≤ n-1) 需向前移动( 个元素。 时,需向前移动( )个元素。 其时间开销为( 其时间开销为( )。
作业辅导:第二章 线性表 作业辅导:
2、已知一个线性表有n(n≤30)个元 已知一个线性表有n n≤30) 其中每个元素的数据占8个字节。 素,其中每个元素的数据占8个字节。 假设一个指针的大小为4个字节。 假设一个指针的大小为4个字节。如果 采用有30个元素的数组存储, 30个元素的数组存储 采用有30个元素的数组存储,那么当 数组中有效元素个数n满足什么条件时, 数组中有效元素个数n满足什么条件时, 数组的存储效率比不带头结点的单链 表更高。 表更高。
作业辅导:第二章 线性表 作业辅导:
Dellist(Sqlist la, Sqlist lb ,Sqlist lc){ for(i=0;i<la.length;i++) for(j=0;j<lb.length;j++) if(la.data[i]==lb.data[j]) for(k=0;k<lc.length;k++) if(lb.data[j]==lc.data[k]) for(r=i;r<la.length-1;r++) la.data[r]=la.data[r+1] }
作业辅导:第二章 线性表 作业辅导:
deletnode(LinkList head , ElemType mink, ElemType maxk){ //带头结点 带头结点 pre=head; p=head->next; while(p && p->data<=mink ){ pre=p; p=p->next; }
5、写出带头结点的双向循环链表L 写出带头结点的双向循环链表L 为空表的条件。 为空表的条件。 6、在单链表和双向链表中,能否从 在单链表和双向链表中, 当前结点出发访问到任一节点? 当前结点出发访问到任一节点?
作业辅导:第二章 线性表 作业辅导:
7、假设一个单循环链表,其结点含 、假设一个单循环链表, 有三个域prior,data和next。其 有三个域 和 。 中data为数据域; prior为指针域, 为数据域; 为指针域, 为数据域 为指针域 它的值为空指针(NULL); next 它的值为空指针 ; 为指针域,指向后继结点。 也为指针域,指向后继结点。设计 算法,将此表改为双向循环链表。 算法,将此表改为双向循环链表。
作业辅导: 作业辅导:第三章 栈和队列
队满条件: quelen==MAXSIZE; 入队: Q.rear指向队尾元素 入队:设Q.rear指向队尾元素 if(quelen!=MAXSIZE) Q.rear= (Q.rear+1)% MAXSIZE Q.base[Q.rear]=x;
作业辅导: 作业辅导:第三章 栈和队列
作业辅导:第三章 栈和队列 作业辅导:
(2)如果进站的车厢序列为 ) 123456,则能否得到435612 435612和 123456,则能否得到435612和 135426的出站序列 的出站序列, 135426的出站序列,并请说明为 什么不能得到或者如何得到( 什么不能得到或者如何得到(即写 出以“s”表示进栈和以“x”表示 出以“s”表示进栈和以“x”表示 表示进栈和以 出栈的栈操作序列) 出栈的栈操作序列)
相关文档
最新文档