77范文网 - 专业文章范例文档资料分享平台

数据结构习题及答案(4)

来源:网络收集 时间:2020-03-27 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

操作的条件是top!=maxsize。

21.设sq[1..maxsize]为一个顺序存储的栈,变量top指示栈顶元素的位置,如果把栈顶元素弹出并送到X中,则需执行语句x=sq[top]; top=top-1。

22.栈的特性是先进后出。

23.对栈进行退栈时的操作是先取出元素,后移动栈顶指针。 24.设s[1..max]为一个顺序存储的栈,变量top指示栈顶位置,栈为满的条件是top==max。

25.设链栈的栈顶指针为top,则栈非空的条件是top!=nil 。

26.已知循环队列用数组data[1...n]存储元素值,用f,r分别作为头尾指针, 则当前元素个数为(n+r-f)mod n。

27.在一个循环队列中,队首指针指向队首元素的前一个位置。(前一个或后一个) 28.队列中允许进行删除的一端称为队首。

29.链队列实际上是一个同时带有头指针和尾指针的单链表(1..n),尾指针指向该单链表的第n个元素。

30.设双向链表链列为lq,lq的头指针为lq.Front,尾指针为lq.Rear,则队列为空的条件是lq->front==lq->rear。

31.从循环队列中删除一个元素,其操作是先取出一个元素,后移动栈顶指针。 32.队列中允许进行插入的一端称为队尾。 三、判断题

1.栈和队列都是限制存取点的线性结构。对 )

2.不同的人栈和出栈组合可能得到相同输出序列。错误:不同的入栈和出栈组合得到不同输出序列。

3.消除递归一定要用栈。(错误:某些情况如尾递归可以转换为递推的形式。 )

4.循环队列是顺序存储结构。(正确) 5.循环队列不会产生溢出。(错误:循环队列不会产生假溢出 ) 6.循环队列满的时候rear= =front。( 错误 )

7.在对链队列(带头结点)做出队操作时不会改变front指针的值。(正确) 四、综合题

1.设有4个元素A、B、C和D进栈,给出它们所有可能的出栈秩序。 A、B、C、D A、B、D、C A、C、B、D A、C、D、B A、D、C、B B、A、C、D B、A、D、C B、C、A、D B、C、D、A B、D、C、A C、B、A、D

C、B、D、A C、D、B、A D、C、B、A 2.输入n个10以内的数,每输入k(0<=k<=9),就把它插人到第k号队列中。最后把10个队列中的非空队列按队列序号以从小到大的顺序串接成一条链,并输出该链中的所有元素。

#include #define MAX 10 #define N 100 struct node {

int data;

struct node *next; };

struct hnode {

struct node *link; } queue[MAX]; main() {

int A[N],n,i,first=1; struct node *p,*s,*head; printf(\数值个数n:\ scanf(\

for (i=0;i

for (i=0;i9);

for(i=0;i

{

s=(struct node *)malloc (sizeof (struct node)); /*建立结点*/ s->data=A[i]; s->next=NULL; if (queue[A[i]].link==NULL) /*是相应队列的第一个结点*/ queue[A[i]].link=s;

else /*不是相应队列的第一个结点*/ { p=queue[A[i]].link; while (p->next!=NULL) p=p->next; /*p指向该链表的最后一个结点*/ p->next=s; } }

head=(struct node *)malloc (sizeof (struct node)); /*建立新的总链表头结点*/

head->next=NULL; for (i=0;i

if (first) /*是链入总链表的第一个链表*/

{ head->next = queue[i].link; first=0; p=head; while (p->next!=NULL)

p=p->next; /*p指向最后结点*/ }

else /*不是链入总链表的第一个链表*/

{

p->next=queue[i].link; p=queue[i].link; while (p->next!=NULL) p=p->next; } } }

printf(\显示所有元素:\\n\

if (head->next!=NULL) /*p指向总链表的首结点*/ p=head->next; while (p!=NULL) { printf(\ p=p->next; } }

3.假设用循环单链表实现循环队列,该队列只使用一个尾指针rear,其相应的存储结构和基本操作算法如下:

(l) 初始化队列 initqueue (Q):建立一个新的空队列 Q。 (2) 人队列enqueue (Q,x):将元素 x插人到队列 Q中。 (3) 出队列delqueue (Q):从队列Q中退出一个元素。 (4) 取队首元素gethead (Q):返回当前队首元素。 (5) 判断队列是否为空:emptyqueue (Q)。 (6) 显示队列中元素:dispqueue (Q)。

/*只有一个指针rear的链式队的基本操作*/ #include

typedef char elemtype;

struct node /*定义链队列结点*/ { elemtype data; struct node *next; };

typedef struct queue /*定义链队列数据类型*/ { struct node *rear; } LinkQueue;

void initqueue(LinkQueue *Q)/*初始化队列*/ {

Q=(struct queue *)malloc(sizeof(struct queue)); Q->rear=NULL; }

void enqueue(LinkQueue *Q,elemtype x) /*入队算法*/ {

struct node *s,*p; s=(struct node *)malloc(sizeof(struct node)); s->data=x;

if (Q->rear==NULL) /*原为空队时*/ { Q->rear=s; s->next=s; }

else /*原队不为空时*/

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库数据结构习题及答案(4)在线全文阅读。

数据结构习题及答案(4).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/jiaoyu/907695.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: