第三章 栈和队列【数据结构与算法】3

简介: 第三章 栈和队列【数据结构与算法】3

循环队列的类型定义

#define MAXSIZE 10
//下面的循环以列及操作依据少用个元素空间来实现
//循环队列的类型定义及基本运算如下。
typedef int ElemType;
typedef struct{ 
  ElemType elem [MAXSIZE];//队列的存储区
  //队头队尾指针
  int front, rear;  
}CSeQueue;//循环队列

循环队列的基本运算

相关代码请看配套资源

6-循环队列.c

int main(){
  CSeQueue *cs=IniseQueue();
  int x=1;
  InSeQueue(cs,x);
  printf("%d",EmptySeQueue(cs));//0
  int x0;
  OutSeQueue(cs,&x0);
  printf("%d",x0);//1
  printf("%d",EmptySeQueue(cs));//1
}

运行结果如下



3.3.3 链队列

链式存储的队列称为链队列

可以采用带头结点的单链表表示队列。

头指针始终指向头结点,尾指针指向当前最后一个元素结点

//链队列的数据类型描述如下。
typedef struct node{ 
  DataType data;
  struct node * next;
}QNode;
//链队列结点的类型
typedef struct{  
  QNode * front;
  QNode * rear;
} LQueue;//将头尾指针封装在一起的链队列

链队列的基本运算

相关代码请看配套资源

7-链队列.c

int main(){
  LQueue *lq=Init_LQueue();
  printf("%d",Empty_LQueue(lq));//1
  int x=1;
  InLQueue(lq,x);
  printf("%d",Empty_LQueue(lq));//0
  int x0;
  Out_LQueue(lq,&x0);
  printf("%d",x0);//1 
  printf("%d",Empty_LQueue(lq));//0
}

运行结果如下

3.4 实例分析与实现

应用实例一 迷宫求解

应用实例二 马踏棋盘
应用实例三 计算器

第三章应用实例【数据结构】

3.5 算法总结 ——递归与分治 算法

习题3

题目

1.单项选择题

(1)(2010考研真题)若元素a,b,e,d,e,f依次进栈,允许进栈、退栈操作交替进行,但不允许连续三次进行退栈操作,则不可能得到的出栈序列是____。

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)若某堆栈的输人序列为1,2,3,n-l,n,输出序列的第1个元素为n,则第i个输出元素为____。

A. n-i+1

B. n-1

C. i

D.哪个元素都有可能

(3)以数组Q[0…m-1]存放循环队列中的元素,变量rear和qulen分别指示循环队列中队尾元素的实际位置和当前队列中元素的个数,队列第一个元素的实际位置是___。
A. rear-qulen

B. rear-qulen+m

C. m-qulen

D. (1+(rear-qulentm))mod m

(4)设输人元素为1,2,3,A,B,输人次序为123AB,元素经过栈后到达输出序列,当所有元素均到达输出序列后,序列____是不可能的。

A. BA321

B. A3B21

C. B32A1

D. AB321

(5)(2012年考研真题)已知操作符包括“+”“一”“”“/”“(”和“)”。将中缀表达式a+b-a((c+d)/e-)+g转换为等价的后缀表达式ab+acd+e/f-*-g+时,用栈来存放暂时还不能确定运算次

A. 5

B. 7

C. 8

D.11

2.综合题
(2) 回文是指正读反读均相同的字符序列,如“abba”和“abdba"均是回文,但“good"不是回文。试写一个算法判定给定的字符串是否为回文。

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

(8) 在循环队列中,可以设置一个标志域tag,以区分当尾指针和头指针相等时,队列状态是“空”还是“满”(tag的值为0表示“空”,tag的值为1表示“满”),编写此结构相应的队列初始化、入队、出队算法。

参考

1.单项选择题

(1) D
(2) A
(3) D
(4) C
(5) A

2.综合题

(2)

相关代码请看配套资源

2.c

int main(){
  char str[10];
  gets(str);
  printf("输入字符串\n");
  printf("%s",str);
  BracketMatch(str);
}

运行结果如下



(6)

相关代码请看配套资源

6.c



int main(){
  XQueue *lq=Init_XQueue();
  printf("%d",Empty_XQueue(lq));//1
  int x1=1;
  InXQueue(lq,x1);
  printf("%d",Empty_XQueue(lq));//0
  int x2=2;
  InXQueue(lq,x2);
  int y1;
  Out_XQueue(lq,&y1);
  printf("%d",x1);//1 
  int y2;
  Out_XQueue(lq,&y2);
  printf("%d",y2);//2
  printf("%d",Empty_XQueue(lq));//0
}

运行结果如下



(8)

相关代码请看配套资源

8.c

int main(){
  CSeQueue *cs=IniseQueue();
  printf("%d",EmptySeQueue(cs));//1
  int x1=1;
  InSeQueue(cs,x1);
  int x2=2;
  InSeQueue(cs,x2);
  printf("%d",ManSeQueue(cs));//1
  int y1;
  OutSeQueue(cs,&y1);
  printf("%d",y1);//1
  printf("%d",EmptySeQueue(cs));//0
  int y2;
  OutSeQueue(cs,&y2);
  printf("%d",y2);//2
  printf("%d",EmptySeQueue(cs));//1
}

运行结果如下

相关文章
|
2月前
|
C语言
【数据结构】栈和队列(c语言实现)(附源码)
本文介绍了栈和队列两种数据结构。栈是一种只能在一端进行插入和删除操作的线性表,遵循“先进后出”原则;队列则在一端插入、另一端删除,遵循“先进先出”原则。文章详细讲解了栈和队列的结构定义、方法声明及实现,并提供了完整的代码示例。栈和队列在实际应用中非常广泛,如二叉树的层序遍历和快速排序的非递归实现等。
251 9
|
2月前
|
存储 算法
非递归实现后序遍历时,如何避免栈溢出?
后序遍历的递归实现和非递归实现各有优缺点,在实际应用中需要根据具体的问题需求、二叉树的特点以及性能和空间的限制等因素来选择合适的实现方式。
40 1
|
12天前
|
算法
【算法】栈
栈相关算法题,供参考,附有链接地址及板书
|
2月前
|
存储 缓存 算法
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式
在C语言中,数据结构是构建高效程序的基石。本文探讨了数组、链表、栈、队列、树和图等常见数据结构的特点、应用及实现方式,强调了合理选择数据结构的重要性,并通过案例分析展示了其在实际项目中的应用,旨在帮助读者提升编程能力。
74 5
|
2月前
|
存储 算法 Java
数据结构的栈
栈作为一种简单而高效的数据结构,在计算机科学和软件开发中有着广泛的应用。通过合理地使用栈,可以有效地解决许多与数据存储和操作相关的问题。
|
2月前
|
存储 JavaScript 前端开发
执行上下文和执行栈
执行上下文是JavaScript运行代码时的环境,每个执行上下文都有自己的变量对象、作用域链和this值。执行栈用于管理函数调用,每当调用一个函数,就会在栈中添加一个新的执行上下文。
|
2月前
|
存储
系统调用处理程序在内核栈中保存了哪些上下文信息?
【10月更文挑战第29天】系统调用处理程序在内核栈中保存的这些上下文信息对于保证系统调用的正确执行和用户程序的正常恢复至关重要。通过准确地保存和恢复这些信息,操作系统能够实现用户模式和内核模式之间的无缝切换,为用户程序提供稳定、可靠的系统服务。
55 4
|
2月前
|
算法 安全 NoSQL
2024重生之回溯数据结构与算法系列学习之栈和队列精题汇总(10)【无论是王道考研人还是IKUN都能包会的;不然别给我家鸽鸽丢脸好嘛?】
数据结构王道第3章之IKUN和I原达人之数据结构与算法系列学习栈与队列精题详解、数据结构、C++、排序算法、java、动态规划你个小黑子;这都学不会;能不能不要给我家鸽鸽丢脸啊~除了会黑我家鸽鸽还会干嘛?!!!
|
2月前
|
算法
数据结构之购物车系统(链表和栈)
本文介绍了基于链表和栈的购物车系统的设计与实现。该系统通过命令行界面提供商品管理、购物车查看、结算等功能,支持用户便捷地管理购物清单。核心代码定义了商品、购物车商品节点和购物车的数据结构,并实现了添加、删除商品、查看购物车内容及结算等操作。算法分析显示,系统在处理小规模购物车时表现良好,但在大规模购物车操作下可能存在性能瓶颈。
55 0
|
2天前
|
机器学习/深度学习 数据采集 算法
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真
本项目基于MATLAB2022a实现时间序列预测,采用CNN-GRU-SAM网络结构。卷积层提取局部特征,GRU层处理长期依赖,自注意力机制捕捉全局特征。完整代码含中文注释和操作视频,运行效果无水印展示。算法通过数据归一化、种群初始化、适应度计算、个体更新等步骤优化网络参数,最终输出预测结果。适用于金融市场、气象预报等领域。
基于GA遗传优化的CNN-GRU-SAM网络时间序列回归预测算法matlab仿真

热门文章

最新文章