第三章栈和队列-作业题

  • 1.栈和列队的基本概念
  • 6-1 使用栈完成回文判断 (12 分)
  • 6-2 判断表达式中括号是否匹配 (12 分)
  • 6-3 队列的操作集合(带尾指针的循环链表) (18 分)
  • 6-4 循环队列的操作集合(只设 rear和quelen) (18 分)
  • 6-5 循环队列的操作集合(增设tag) (18 分)

1.栈和列队的基本概念

2-1 若元素a,b,c,d,e,f依次进栈,允许进栈、退栈操作交替进行,但不允许连续三次进行退栈操作,则不可能得到的出栈序列是(D )。
(2分)
A.d,c,e,b,f,a
B.c,b,d,a,e,f
C.b,c,a,e,f,d
D.a,f,e,d,c,b
2-2 若某堆栈的输入序列为1,2,3,…,n-1,n,输出序列的第1个元素为n,则第i个输出元素为(A )
A.n-i+1
B.n-1
C.i
D.哪个元素都有可能
2-3 以数组Q[0…m-1]存放循环队列中的元素,变量rear和qulen分别指示循环队列中队尾元素的实际位置和当前队列中元素的个数,队列第一个元素的实际位置是(D )。
A.rear-qulen
B.rear-qulen+m
C.m-quelen
D.(1+(rear-quelen+m)) mod m
2-4设输入元素为1,2,3,A,B,输入次序为123AB,元素经过栈后到达输出序列,当所有元素均到达输出序列后,序列(C )是不可能的。
(2分)
A.BA321
B.A3B21
C.B32A1
D.AB321
2-5已知操作符包括+,-,,/,(,)。将中缀表达式 a+b-a((c+d)/e-f)+g 转换为等价的后缀表达式 ab+acd+e/f-*-g+ 时,用栈来存放暂时还不确定运算次序的操作符。若栈初始时为空,则转换过程中同时保存在栈中的操作符的最大个数是(A )。
A.5
B.7
C.8
D.11
2-6元素A,B,C,D依次入栈,出栈无限制,则以下( B)是可能的出栈序列。
A.C, A, B, D
B.B, A, D, C
C.B, D, A, C
D.A, D, B, C
2-7用S表示入栈操作,X表示出栈操作,若元素入栈的顺序为1234,为了得到1342出栈顺序,相应的S和X的操作串为( )。

A.SXSSSXXX
B.SXSXSXSX
C.SSSSXXXX
D.SXSSXSXX
2-8若用大小为6的数组来实现循环队列,且当前front和rear的值分别为0和4。当从队列中删除两个元素,再加入两个元素后,front和rear的值分别为多少?(A)
A.2和0
B.2和2
C.2和4
D.2和6
2-9如果循环队列用大小为m的数组表示,队头位置为front、队列元素个数为size,那么队尾元素位置rear为:D
A.front+size
B.front+size-1
C.(front+size)%m
D.(front+size-1)%m
2-10循环队列的队满条件为 (C )。
A.(sq.rear+1) % maxsize ==(sq.front+1) % maxsize
B.(sq.front+1) % maxsize ==sq.rear
C.(sq.rear+1) % maxsize ==sq.front
D.sq.rear ==sq.front
2-11栈和队列的共同点是( C)。
A.都是先进先出
B.都是先进后出
C.只允许在端点处插入和删除元素
D.没有共同点

6-1 使用栈完成回文判断 (12 分)

回文是指正读反读均相同的字符序列,如“abba”和“abdba”均是回文,但“good”不是回文。试写一个算法判定给定的字符串是否为回文。
函数接口定义:

int IsPalindrome(char s[]);  //判断字符串s是否回文。

其中 s 是用户传入的参数,其值为待判断字符串。如果s 是回文,则返回值为1,否则返回值为0。

特别说明:本题要求使用栈的基本操作完成回文的判断。 栈的定义如下:

#define Stack_Size 50
typedef char ElemType;
typedef struct
{      ElemType  data[Stack_Size]; int  top;
}SeqStack;//栈的基本操作函数定义
SeqStack* InitStack();  //栈初始化
int IsEmpty(SeqStack *S); //栈判空
int IsFull(SeqStack *S);  //栈判满
int Push(SeqStack * S, ElemType x);  //  入栈
int Pop(SeqStack * S, ElemType *x);  //  出栈
int GetTop(SeqStack *S, ElemType *x); // 取栈顶元素

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define TRUE 1
#define FALSE 0#define Stack_Size 50
typedef char ElemType;
typedef struct
{      ElemType  data[Stack_Size]; int  top;
}SeqStack;//栈的基本操作函数定义
SeqStack* InitStack();  //栈初始化
int IsEmpty(SeqStack *S); //栈判空
int IsFull(SeqStack *S);  //栈判满
int Push(SeqStack * S, ElemType x);  //  入栈
int Pop(SeqStack * S, ElemType *x);  //  出栈
int GetTop(SeqStack *S, ElemType *x); // 取栈顶元素int IsPalindrome(char s[]);  //判断字符串s是否回文。main()
{char s[20];scanf("%s",s);if(IsPalindrome(s))printf("It's Palidrome!\n"); elseprintf("It's not Palidrome!\n");
}SeqStack* InitStack()
{SeqStack *s;s=(SeqStack *)malloc(sizeof(SeqStack));s->top=-1;return s;
}
int IsEmpty(SeqStack *S)
{return(S->top==-1?TRUE:FALSE);
}
int IsFull(SeqStack *S)
{return(S->top== Stack_Size-1?TRUE:FALSE);
}
int Push(SeqStack * S, ElemType x)
{if(S->top== Stack_Size-1)  return(FALSE); S->top++;S->data[S->top]=x;return(TRUE);
}
int Pop(SeqStack * S, ElemType *x)
{     if(S->top==-1)     return(FALSE);*x= S->data[S->top];S->top--;    return(TRUE);
}
int GetTop(SeqStack *S, ElemType *x)
{  if(S->top==-1)return(FALSE);*x = S->data[S->top];return(TRUE);
}/* 请在这里填写答案 */

输入样例:

在这里给出一组输入。例如:

abba
结尾无空行

输出样例:

在这里给出相应的输出。例如:

It’s Palidrome!

int IsPalindrome(char s[]) {SeqStack* stack = InitStack();stack->top = 0;int Len = strlen(s);for ( ; stack->top < Len / 2 && !IsFull(stack); ++stack->top) {stack->data[stack->top] = s[stack->top];}stack->top--;for (int p = (Len - 1) / 2 + 1; p < Len; ++p) {if (stack->data[stack->top] == s[p]) {stack->top--;} else {break;}}if (stack->top == -1) {return 1;} else {return 0;}
}

6-2 判断表达式中括号是否匹配 (12 分)

设算术表达式中有圆括号、方括号、花括号,设计一个算法,判断表达式中的各种括号是否配对。

说明:

(1)本题仅判断括号是否配对,对于表达式其它问题不做检测。

(2)括号只考虑配对问题,不考虑括号间的嵌套准则。例如:(a+(b-[c+d])*{e/f}) 中的括号是匹配的;(a+{b-c)} 中的括号不匹配。
函数接口定义:

int IsBracketMatch(char *str);//判断str中括号是否匹配。

其中 str是用户传入的参数,其值为带判断表达式。 若括号匹配则返回1,否则返回0。

栈的定义如下:

#define Stack_Size 50
typedef char ElemType;
typedef struct
{      ElemType  data[Stack_Size]; int  top;
}SeqStack;//栈的基本操作函数定义
SeqStack* InitStack();  //栈初始化
int IsEmpty(SeqStack *S); //栈判空
int IsFull(SeqStack *S);  //栈判满
int Push(SeqStack * S, ElemType x);  //  入栈
int Pop(SeqStack * S, ElemType *x);  //  出栈
int GetTop(SeqStack *S, ElemType *x); // 取栈顶元素

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>#define TRUE 1
#define FALSE 0#define Stack_Size 50
typedef char ElemType;
typedef struct
{      ElemType  data[Stack_Size]; int  top;
}SeqStack;//栈的基本操作函数定义
SeqStack* InitStack();  //栈初始化
int IsEmpty(SeqStack *S); //栈判空
int IsFull(SeqStack *S);  //栈判满
int Push(SeqStack * S, ElemType x);  //  入栈
int Pop(SeqStack * S, ElemType *x);  //  出栈
int GetTop(SeqStack *S, ElemType *x); // 取栈顶元素int IsBracketMatch(char *str);//判断str中括号是否匹配。main()
{char s[20];scanf("%s",s);if( IsBracketMatch(s))printf("Match!\n"); elseprintf("Not Match!\n");
}SeqStack* InitStack()
{SeqStack *s;s=(SeqStack *)malloc(sizeof(SeqStack));s->top=-1;return s;
}
int IsEmpty(SeqStack *S)
{return(S->top==-1?TRUE:FALSE);
}
int IsFull(SeqStack *S)
{return(S->top== Stack_Size-1?TRUE:FALSE);
}
int Push(SeqStack * S, ElemType x)
{if(S->top== Stack_Size-1)  return(FALSE); S->top++;S->data[S->top]=x;return(TRUE);
}
int Pop(SeqStack * S, ElemType *x)
{     if(S->top==-1)     return(FALSE);*x= S->data[S->top];S->top--;    return(TRUE);
}
int GetTop(SeqStack *S, ElemType *x)
{  if(S->top==-1)return(FALSE);*x = S->data[S->top];return(TRUE);
}/* 请在这里填写答案 */

输入样例1:

在这里给出一组输入。例如:

(a+(b-[c*d]-{e/f}))
结尾无空行

输出样例1:

在这里给出相应的输出。例如:

Match!

输入样例2:

在这里给出一组输入。例如:

(a+[b-(c*d]-{e/f}))
结尾无空行

输出样例2:

在这里给出相应的输出。例如:

Not Match!

int IsBracketMatch(char *str) {SeqStack *stack = InitStack();ElemType x = 'c';for (int i = 0; i < strlen(str); ++i) {if ((str[i] == '(' || str[i] == '[' || str[i] == '{') && !IsFull(stack)) {Push(stack, str[i]);} else if (str[i] == ')' || str[i] == ']' || str[i] == '}') {switch (str[i]) {case ')':if (GetTop(stack, &x) && x == '(') {Pop(stack, &x);} else {return 0;}break;case ']':if (GetTop(stack, &x) && x == '[') {Pop(stack, &x);} else {return 0;}break;case '}':if (GetTop(stack, &x) && x == '{') {Pop(stack, &x);} else {return 0;}break;default :break;}}}if (IsEmpty(stack)) {return 1;}return 0;
}

6-3 队列的操作集合(带尾指针的循环链表) (18 分)

假设以带头结点的循环链表表示队列,并且只设一个指针指向队尾元素结点,试编写相应的初始化队列、判空队、入队和出队算法。(队中元素均为整数)

程序功能为:初始化一个空队列,然后接收命令并完成相应操作,命令如下:

ENQUEUE x 将整数x入队。若操作成功则无输出,若操作失败则输出FULL!。

DELQUEUE 出队一个元素。若操作成功则输出该元素,若失败则输EMPTY QUEUE!。

ISEMPTY 判断队列是否为空。若为空则输出 EMPTY,若非空则输出NOT EMPTY。

END 依次输出队列中所有元素,释放结点空间,并结束程序。
函数接口定义:

CirLinkQueue InitQueue(); //初始化队列,返回值为队列的尾指针。
int IsEmptyQueue(CirLinkQueue Q); //队列判空,若为空,则返回1;非空,返回0。
int EnQueue(CirLinkQueue *Q, DataType x); // 元素x入队,若操作成功,则返回1;操作失败,则返回0。
int DelQueue(CirLinkQueue *Q, DataType *x); // 出队一个元素,若操作成功,则返回1;操作失败,则返回0。

说明:队列使用仅带尾指针的循环链表表示,数据类型定义如下:

typedef int DataType;
typedef struct node
{      DataType  data;struct node *next;
}LNode,*CirLinkQueue;

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>typedef int DataType;
typedef struct node
{      DataType  data;struct node *next;
}LNode,*CirLinkQueue;//队列的基本操作函数定义
CirLinkQueue InitQueue();  //初始化队列,返回值为队列的尾指针。
int IsEmptyQueue(CirLinkQueue Q); //队列判空,若为空,则返回1;非空,返回0。
int EnQueue(CirLinkQueue *Q, DataType x);  //  元素x入队,若操作成功,则返回1;操作失败,则返回0。
int DelQueue(CirLinkQueue *Q, DataType *x);  //  出队一个元素,若操作成功,则返回1;操作失败,则返回0。
void DestroyQueue(CirLinkQueue Q);int main(void)
{char cmd[20];CirLinkQueue pQueue = InitQueue();DataType x;scanf("%s", cmd);while (strcmp(cmd, "END") != 0){if (strcmp(cmd, "ENQUEUE") == 0){scanf("%d", &x);if (EnQueue(&pQueue, x) == 0)printf("FULL QUEUE!\n");}else if (strcmp(cmd, "DELQUEUE") == 0){if (DelQueue(&pQueue,&x) == 0)printf("EMPTY QUEUE!\n");elseprintf("%d\n",x);}else if (strcmp(cmd, "ISEMPTY") == 0){if (IsEmptyQueue(pQueue) == 0)printf("NOT EMPTY\n");elseprintf("EMPTY\n");}scanf("%s", cmd);}DestroyQueue(pQueue);return 0;
}void DestroyQueue(CirLinkQueue Q)
{LNode *p,*t;p=Q;Q=Q->next;p->next=NULL;p=Q->next;while(p){printf("%d ",p->data);t=p->next;free(p);p=t;}free(Q);
}/* 请在这里填写答案 */

输入样例:

在这里给出一组输入。例如:

ISEMPTY
ENQUEUE 1
ENQUEUE 2
DELQUEUE
DELQUEUE
DELQUEUE
ENQUEUE 3
ISEMPTY
ENQUEUE 4
ENQUEUE 5
DELQUEUE
END
结尾无空行

输出样例:

在这里给出相应的输出。例如:

EMPTY
1
2
EMPTY QUEUE!
NOT EMPTY
3
4 5
结尾无空行

CirLinkQueue InitQueue(){CirLinkQueue Q;Q=(CirLinkQueue)malloc(sizeof(LNode));Q->next=Q;return Q;
}
int IsEmptyQueue(CirLinkQueue Q){if(Q->next==Q)return 1;else return 0;
}
int EnQueue(CirLinkQueue *Q, DataType x){LNode *p;p=(LNode *)malloc(sizeof(LNode));if(p==NULL)return 0;p->data=x;p->next=(*Q)->next;(*Q)->next=p;(*Q)=p; return 1;
}
int DelQueue(CirLinkQueue *Q, DataType *x){if(IsEmptyQueue(*Q))return 0;CirLinkQueue r=*Q,f;f=r->next->next;if(f==r){ *Q=r->next;*x=f->data;r->next->next=f->next;}else{*x=f->data;r->next->next=f->next;}return 1;
}

6-4 循环队列的操作集合(只设 rear和quelen) (18 分)

假设循环队列中只设rear和quelen来分别指示队尾元素的位置和队中元素的个数,试编写相应的判满、判空、入队和出队算法。(队中元素均为整数,为了便于测试,数组做大容量设定为4。)

程序功能为:初始化一个空队列,然后接收命令并完成相应操作,命令如下: ENQUEUE x 将整数x入队。若操作成功则无输出,若操作失败则输出FULL QUEUE!。

DELQUEUE 出队一个元素。若操作成功则输出该元素,若失败则输EMPTY QUEUE!。

ISEMPTY 判断队列是否为空。若为空则输出 EMPTY,若非空则输出NOT EMPTY。

ISFULL 判断队列是否已满。若满则输出 FULL,否则输出NOT FULL。

END 依次输出队列中所有元素,释放结点空间,并结束程序。
函数接口定义:

int IsEmptyQueue(SeQueue *Q); //队列判空,若为空,则返回1;非空,返回0。int IsFullQueue(SeQueue *Q); //队列判满,若为满,则返回1;非满,返回0。int EnQueue(SeQueue *Q, ElemType x);  //  元素x入队,若操作成功,则返回1;操作失败,则返回0。int DelQueue(SeQueue *Q, ElemType *x);  //  出队一个元素,若操作成功,则返回1;操作失败,则返回0。说明:循环队列类型定义如下:#define MAXSIZE 4 //队列的最大容量
typedef int ElemType;
typedef struct
{      ElemType  elem[MAXSIZE];int rear;  //队尾元素的位置int quelen; //队中元素的个数
}SeQueue;

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 4 //队列的最大容量
typedef int ElemType;
typedef struct
{      ElemType  elem[MAXSIZE];int rear;  //队尾元素的位置int quelen; //队中元素的个数
}SeQueue;//队列的基本操作函数定义
SeQueue * InitQueue();  //初始化队列,返回值为指向队列的指针。
void DestroyQueue(SeQueue *Q); //依次输出队列中元素值,并释放空间。int IsEmptyQueue(SeQueue *Q); //队列判空,若为空,则返回1;非空,返回0。
int IsFullQueue(SeQueue *Q); //队列判满,若为满,则返回1;非满,返回0。
int EnQueue(SeQueue *Q, ElemType x);  //  元素x入队,若操作成功,则返回1;操作失败,则返回0。
int DelQueue(SeQueue *Q, ElemType *x);  //  出队一个元素,若操作成功,则返回1;操作失败,则返回0。int main(void)
{char cmd[20];SeQueue *pQueue=InitQueue();ElemType x;scanf("%s", cmd);while (strcmp(cmd, "END") != 0){if (strcmp(cmd, "ENQUEUE") == 0){scanf("%d", &x);if (EnQueue(pQueue, x) == 0)printf("FULL QUEUE!\n");}else if (strcmp(cmd, "DELQUEUE") == 0){if (DelQueue(pQueue,&x) == 0)printf("EMPTY QUEUE!\n");elseprintf("%d\n",x);}else if (strcmp(cmd, "ISEMPTY") == 0){if (IsEmptyQueue(pQueue) == 0)printf("NOT EMPTY\n");elseprintf("EMPTY\n");}else if (strcmp(cmd, "ISFULL") == 0){if (IsFullQueue(pQueue) == 0)printf("NOT FULL\n");elseprintf("FULL\n");}scanf("%s", cmd);}DestroyQueue(pQueue);return 0;
}SeQueue *InitQueue()  //初始化队列,返回值为指向队列的指针。
{SeQueue *q;q=(SeQueue*)malloc(sizeof(SeQueue));q->quelen=0;q->rear=-1;return q;
}void DestroyQueue(SeQueue *Q)
{ElemType x;while(!IsEmptyQueue(Q)){DelQueue(Q,&x);printf("%d ",x);}printf("\n");free(Q);
}
/* 请在这里填写答案 */

输入样例:

在这里给出一组输入。例如:

ENQUEUE 1
ISEMPTY
ISFULL
DELQUEUE
ISEMPTY
ISFULL
DELQUEUE
ENQUEUE 2
ENQUEUE 3
DELQUEUE
ENQUEUE 4
ENQUEUE 5
ENQUEUE 6
ENQUEUE 7
ISFULL
ISEMPTY
DELQUEUE
ENQUEUE 8
END
结尾无空行

输出样例:

在这里给出相应的输出。例如:

NOT EMPTY
NOT FULL
1
EMPTY
NOT FULL
EMPTY QUEUE!
2
FULL QUEUE!
FULL
NOT EMPTY
3
4 5 6 8
结尾无空行

int IsEmptyQueue(SeQueue *Q){if(Q->quelen == 0) return 1;else return 0;
}
int IsFullQueue(SeQueue *Q){if(Q->quelen == MAXSIZE)return 1;else return 0;
}
int EnQueue(SeQueue *Q, ElemType x){if(IsFullQueue(Q))return 0;Q->rear=(Q->rear+1)%MAXSIZE;Q->elem[Q->rear]=x;Q->quelen++;return 1;
}
int DelQueue(SeQueue *Q, ElemType *x){if (IsEmptyQueue(Q))return 0;Q->quelen--;*x = Q->elem[(Q->rear - Q->quelen+MAXSIZE)%MAXSIZE];return 1;
}

6-5 循环队列的操作集合(增设tag) (18 分)

在循环队列中,可以设置一个标志域tag,以区分当尾指针和头指针相等时,队列的状态是“空”还是“满”。编写此结构相应的队列初始化、入队、出队算法以及判空、判满算法。(队中元素均为整数,为了便于测试,数组做大容量设定为4。)

程序功能为:初始化一个空队列,然后接收命令并完成相应操作,命令如下: ENQUEUE x 将整数x入队。若操作成功则无输出,若操作失败则输出FULL QUEUE!。

DELQUEUE 出队一个元素。若操作成功则输出该元素,若失败则输EMPTY QUEUE!。

ISEMPTY 判断队列是否为空。若为空则输出 EMPTY,若非空则输出NOT EMPTY。

ISFULL 判断队列是否已满。若满则输出 FULL,否则输出NOT FULL。

END 依次输出队列中所有元素,释放结点空间,并结束程序。
函数接口定义:

SeqQueue * InitQueue();  //初始化队列,返回值为指向队列的指针。
int IsEmptyQueue(SeqQueue *Q); //队列判空,若为空,则返回1;非空,返回0。
int IsFullQueue(SeqQueue *Q); //队列判满,若为满,则返回1;非满,返回0。
int EnQueue(SeqQueue *Q, ElemType x);  //  元素x入队,若操作成功,则返回1;操作失败,则返回0。
int DelQueue(SeqQueue *Q, ElemType *x);  //  出队一个元素,若操作成功,则返回1;操作失败,则返回0。说明:循环队列类型定义如下:#define MAXSIZE 4 //队列的最大容量
typedef int ElemType;
typedef struct
{      ElemType  elem[MAXSIZE];int rear;  //队尾元素的位置int front; //对头元素的前一个位置int tag;//标志最近一次队列操作是入队还是出队。入队设为1,出队设为0。
}SeqQueue;

裁判测试程序样例:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAXSIZE 4 //队列的最大容量
typedef int ElemType;
typedef struct
{      ElemType  elem[MAXSIZE];int rear;  //队尾元素的位置int front; //对头元素的前一个位置int tag;//标志最近一次队列操作是入队还是出队。入队设为1,出队设为0。
}SeqQueue;//队列的基本操作函数定义
SeqQueue * InitQueue();  //初始化队列,返回值为指向队列的指针。
void DestroyQueue(SeqQueue *Q); //依次输出队列中元素值,并释放空间。int IsEmptyQueue(SeqQueue *Q); //队列判空,若为空,则返回1;非空,返回0。
int IsFullQueue(SeqQueue *Q); //队列判满,若为满,则返回1;非满,返回0。
int EnQueue(SeqQueue *Q, ElemType x);  //  元素x入队,若操作成功,则返回1;操作失败,则返回0。
int DelQueue(SeqQueue *Q, ElemType *x);  //  出队一个元素,若操作成功,则返回1;操作失败,则返回0。int main(void)
{char cmd[20];SeqQueue *pQueue=InitQueue();ElemType x;scanf("%s", cmd);while (strcmp(cmd, "END") != 0){if (strcmp(cmd, "ENQUEUE") == 0){scanf("%d", &x);if (EnQueue(pQueue, x) == 0)printf("FULL QUEUE!\n");}else if (strcmp(cmd, "DELQUEUE") == 0){if (DelQueue(pQueue,&x) == 0)printf("EMPTY QUEUE!\n");elseprintf("%d\n",x);}else if (strcmp(cmd, "ISEMPTY") == 0){if (IsEmptyQueue(pQueue) == 0)printf("NOT EMPTY\n");elseprintf("EMPTY\n");}else if (strcmp(cmd, "ISFULL") == 0){if (IsFullQueue(pQueue) == 0)printf("NOT FULL\n");elseprintf("FULL\n");}scanf("%s", cmd);}DestroyQueue(pQueue);return 0;
}void DestroyQueue(SeqQueue *Q)
{ElemType x;while(!IsEmptyQueue(Q)){DelQueue(Q,&x);printf("%d ",x);}printf("\n");free(Q);
}/* 请在这里填写答案 */

输入样例:

在这里给出一组输入。例如:

ISEMPTY
ENQUEUE 1
ENQUEUE 2
DELQUEUE
DELQUEUE
DELQUEUE
ENQUEUE 3
ISEMPTY
ENQUEUE 4
ENQUEUE 5
DELQUEUE
END
结尾无空行

输出样例:

在这里给出相应的输出。例如:

EMPTY
1
2
EMPTY QUEUE!
NOT EMPTY
3
4 5
结尾无空行

SeqQueue * InitQueue(){SeqQueue *Q;Q=(SeqQueue *)malloc(sizeof(SeqQueue));Q->front=Q->rear=-1;return Q;
}
int IsEmptyQueue(SeqQueue *Q){if(Q->tag==0&&Q->rear==Q->front)return 1;return 0;
}
int IsFullQueue(SeqQueue *Q){if(Q->tag==1&&Q->rear==Q->front)return 1;return 0;
}
int EnQueue(SeqQueue *Q, ElemType x){if(IsFullQueue(Q))return 0;Q->rear=(Q->rear+1)%MAXSIZE;Q->elem[Q->rear]=x;Q->tag=1;return 1;
}
int DelQueue(SeqQueue *Q, ElemType *x){if(IsEmptyQueue(Q))return 0;Q->front=(Q->front+1)%MAXSIZE;*x=Q->elem[Q->front];Q->tag=0;return 1;
}

第三章栈和队列-作业题相关推荐

  1. (王道408考研数据结构)第三章栈和队列-第三节1:栈的应用之括号匹配问题和表达式问题(前缀、中缀和后缀)

    前面我们就说过,栈是一种先进后出的线性表,这种先进后出的特性就决定了它在一类场合或问题中会经常被用到--递归.考研数据结构中所涉及的利用栈结构解决递归问题或者考察栈结构特性的问题主要有这么几类 括号匹 ...

  2. 王道考研408 数据结构 第三章 栈、队列与数组

    第三章 栈.队列与数组 3.1 栈 3.1.03 假设以I和O分别表示入栈和出栈操作.栈的初态和终态均为空,入栈和出栈的操作序列可表示为仅由I和O组成的序列,称可以操作的序列为合法序列,否则称为非法序 ...

  3. 数据结构-第三章-栈和队列(5)-链队

    数据结构 ⚡️数据结构-第一章 ⚡️抽象数据类型案例 ⚡️数据结构-第二章(1)-线性结构 ⚡️数据结构-第二章(2)-线性表的顺序表示和实现 ⚡️数据结构-第二章(3)-顺序表(含代码) ⚡️数据结 ...

  4. C语言数据结构【手抄版】第三章 栈和队列

    注意:文中彩色代码均在Visual Studio 2022编译器中编写,本文为C语言数据结构手抄版,文中有部分改动,非原创. 目录 注意:文中彩色代码均在Visual Studio 2022编译器中编 ...

  5. C语言数据结构-第三章栈和队列-电大同步进度

    第三章栈和队列简介 从数据结构角度看,栈和队列是两种重要的线性结构,是一类操作受限制的特殊线性表,其特殊性在于限制插入和删除等运算的位置. 堆栈,限制用户只能在指定的一端插入和删除元素,因此具有后进先 ...

  6. 王道数据结构课代表 - 考研数据结构 第三章 栈和队列 究极精华总结笔记

    本篇博客是考研期间学习王道课程 传送门 的笔记,以及一整年里对数据结构知识点的理解的总结.希望对新一届的计算机考研人提供帮助!!!   关于对 栈和队列 章节知识点总结的十分全面,涵括了<王道数 ...

  7. (王道408考研数据结构)第三章栈和队列-第一节:栈基本概念、顺序栈和链栈基本操作

    文章目录 一:栈基本概念 (1)栈的定义 (2)压栈和出栈 (3)进栈出栈变化形式 (4)栈的操作 二:栈的顺序存储结构及其操作实现 (1)顺序栈的定义 (2)进栈 (3)出栈 (4)读取栈顶元素 ( ...

  8. 数据结构——第三章 栈和队列

    一.单选题(共18题,55分) 1.栈结构通常采用的两种存储结构是( ).  A. 顺序存储结构和链表存储结构.  B. 散列方式和索引方式. C. 链表存储结构和数组.  D. 线性链表结构和非线性 ...

  9. 第三章 栈、队列和数组

    3_1 03.判断操作序列是否合法,合法,返回true,否则返回false bool judge(char A[])//A[]用来存放字符数组 {int i=0;//用于扫描字符数组int j=k=0 ...

最新文章

  1. HTML中行内元素与块级元素的区别
  2. 唐山师范学院计算机论文,唐山师范学院校园网络解决方案 毕业论文
  3. 【转】Scala: Example use for early definition / early initializer / pre-initialized fields
  4. @Scheduled(cron=) spring定时任务时间设置
  5. Datalogic得利捷Memor™ 10入选“安卓企业推荐计划”
  6. 公众号写作排版指南教程v1.0
  7. matlab画区间柱状图,科学网—Matlab画柱状图 - 高淑敏的博文
  8. 医疗管理系统-项目概述和环境搭建
  9. reportunit 命令_DevExpress之XtraReport 学习
  10. 三天入门MySQL---DAY 1---库和表的创建、删除、更新
  11. win11家庭版设置远程桌面
  12. 机器人体验营笔记(二)基础
  13. java utill scanner_java.util.Scanner应用详解 转
  14. Android程序员的春天!Android项目开发如何设计整体架构?太香了
  15. Android实习周记:第二周,(IT==不停的学习) is TRUE
  16. RoboWare安装教程
  17. ZigBee室内定位方案的优势在哪里,该技术可靠吗-新导智能
  18. Java程序开发学习之入门
  19. vue3学习笔记 2023
  20. python实现xmind转excel_用 python 实现 xmind 和 mindjet 格式互转

热门文章

  1. 7-3 将x的平方赋值给y
  2. win7计算机个性化,win7系统没有个性化怎么回事_win7系统右键没有个性化如何处理-win7之家...
  3. 英语学习单词篇(4)
  4. 行列式、奇异矩阵、矩阵范数、条件数、AdaGrad
  5. ShineScrum10月27日高端敏捷沙龙火热报名
  6. 微信小程序开发教程--从零开始
  7. Centos中安装docker-compose
  8. 计算机网络划分子网实验报告,计算机网络ip协议实验报告范文
  9. 电脑微信2.9.0测试版更新内容
  10. 【大数据开发运维解决方案】hadoop fs常用命令案例解释