操作的条件是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
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;i 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)在线全文阅读。
相关推荐: