http://blog.csdn.net/fisherwan/article/details/21479649

栈和队列都有两种实现方式,一种在之前已经写过了,是链式存储形式,另一种是顺序存储形式。也就是这里所写的用数组的形式实现,和链式存储形式相比,有几个不同的地方。

  1. 顺序存储的方式,必须确定栈和队列的大小,也就是要确定数组的大小。而链式储存是动态分配的,根据需要来增减。
  2. 顺序存储的方式有溢出的现象,由于是数组存储,所以超出数组下标的时候就溢出了。

下面上代码:

SequentialStack.h 顺序存储栈头文件

[cpp] view plain copy
  1. #ifndef _SEQUENTIALSTACK_H_H
  2. #define _SEQUENTIALSTACK_H_H
  3. typedef int SStackEle;
  4. const int MAXSTACK = 20;
  5. typedef struct SSTACK
  6. {
  7. SStackEle arrele[MAXSTACK];
  8. SStackEle top;
  9. }SStack;
  10. //初始化顺序栈
  11. void InitSStack(SStack &s);
  12. //压入栈
  13. void PushSStack(SStack &s, SStackEle ele);
  14. //出栈
  15. void PopSStack(SStack &s, SStackEle &ele);
  16. //判断栈是否为空
  17. bool IsemptySStack(SStack s);
  18. //得到栈顶元素
  19. SStackEle GetTopSStack(SStack s);
  20. #endif

SequentialQueue.h 顺序存储队列头文件

[cpp] view plain copy
  1. #ifndef _SEQUENTIALQUEUE_H_H
  2. #define _SEQUENTIALQUEUE_H_H
  3. typedef int SQueueEle;
  4. const int MAXQUEUE = 10;
  5. typedef struct SQUEUE
  6. {
  7. SQueueEle arrele[MAXQUEUE];
  8. SQueueEle front, rear;
  9. }SQueue;
  10. //初始化顺序队列
  11. void InitSQueue(SQueue &q);
  12. //入队
  13. void EnSQueue(SQueue &q, SQueueEle ele);
  14. //出队
  15. void DeSQueue(SQueue &q, SQueueEle &ele);
  16. //判断队列是否为空
  17. bool IsemptySQueue(SQueue q);
  18. //获得队头元素
  19. SQueueEle GetFrontSQueue(SQueue q);
  20. #endif

SequentialStack.cpp 顺序存储栈源文件

[cpp] view plain copy
  1. #include "SequentialStack.h"
  2. #include <stdio.h>
  3. //初始化顺序栈
  4. void InitSStack(SStack &s)
  5. {
  6. s.top = -1;
  7. }
  8. //压入栈
  9. void PushSStack(SStack &s, SStackEle ele)
  10. {
  11. s.top++;
  12. if (s.top < MAXSTACK)
  13. s.arrele[s.top] = ele;
  14. else
  15. printf("栈满,不能进行压入操作!\n");
  16. }
  17. //出栈
  18. void PopSStack(SStack &s, SStackEle &ele)
  19. {
  20. if (s.top < 0)
  21. printf("栈空,不能进行出栈操作!\n");
  22. else
  23. {
  24. ele = s.arrele[s.top];
  25. s.top--;
  26. }
  27. }
  28. //判断顺序栈是否为空
  29. bool IsemptySStack(SStack s)
  30. {
  31. if (s.top = -1)
  32. return true;
  33. else
  34. return false;
  35. }
  36. //获得栈顶元素值
  37. SStackEle GetTopSStack(SStack s)
  38. {
  39. if (s.top < 0)
  40. printf("栈空,不能获得栈顶元素值!\n");
  41. else
  42. return s.arrele[s.top];
  43. }

SequentialQueue.cpp 顺序存储队列源文件

[cpp] view plain copy
  1. #include "SequentialQueue.h"
  2. #include <stdio.h>
  3. //初始化顺序队列
  4. void InitSQueue(SQueue &q)
  5. {
  6. q.front = q.rear = -1;
  7. }
  8. //入队列
  9. void EnSQueue(SQueue &q, SQueueEle ele)
  10. {
  11. if (q.rear >= MAXQUEUE)
  12. printf("队列满,不能进行入队操作!\n");
  13. else
  14. q.arrele[++q.rear] = ele;
  15. }
  16. //出队列
  17. void DeSQueue(SQueue &q, SQueueEle &ele)
  18. {
  19. if (IsemptySQueue(q))
  20. printf("队列空,不能进行出队操作!\n");
  21. else
  22. ele = q.arrele[++q.front];
  23. }
  24. //判断队列是否为空
  25. bool IsemptySQueue(SQueue q)
  26. {
  27. if (q.front == q.rear)
  28. return true;
  29. else
  30. return false;
  31. }
  32. //获得队头元素值
  33. SQueueEle GetFrontSQueue(SQueue q)
  34. {
  35. if (IsemptySQueue(q))
  36. printf("队空,不能获得队头元素值!\n");
  37. else
  38. return q.arrele[q.front + 1];
  39. }

main.cpp 测试程序源文件

[cpp] view plain copy
  1. #include <stdio.h>
  2. #include "SequentialStack.h"
  3. #include "SequentialQueue.h"
  4. int main()
  5. {
  6. /*顺序栈测试代码*/
  7. int ele;
  8. SStack s;
  9. InitSStack(s);
  10. PushSStack(s, 0);
  11. PushSStack(s, 1);
  12. PushSStack(s, 2);
  13. printf("栈顶元素值为:%d\n", GetTopSStack(s));
  14. PopSStack(s, ele);
  15. printf("出栈第1个元素是:%d\n", ele);
  16. printf("栈顶元素值为:%d\n", GetTopSStack(s));
  17. PopSStack(s, ele);
  18. printf("出栈第2个元素是:%d\n", ele);
  19. PopSStack(s, ele);
  20. printf("出栈第3个元素是:%d\n", ele);
  21. PopSStack(s, ele);
  22. if (IsemptySStack(s))
  23. printf("栈为空!\n");
  24. putchar('\n');
  25. /*顺序队列测试代码*/
  26. SQueue q;
  27. InitSQueue(q);
  28. EnSQueue(q, 0);
  29. EnSQueue(q, 1);
  30. EnSQueue(q, 2);
  31. printf("队头元素值为:%d\n", GetFrontSQueue(q));
  32. DeSQueue(q, ele);
  33. printf("出队第1个元素是:%d\n", ele);
  34. printf("队头元素值为:%d\n", GetFrontSQueue(q));
  35. DeSQueue(q, ele);
  36. printf("出队第2个元素是:%d\n", ele);
  37. DeSQueue(q, ele);
  38. printf("出队第3个元素是:%d\n", ele);
  39. DeSQueue(q, ele);
  40. if (IsemptySQueue(q))
  41. printf("队列为空!\n");
  42. return 0;
  43. }

下面附测试结果图一张:

PS:个人测试没有问题,如果大家发现问题请及时联系,不胜感激!

(C语言版)栈和队列(二)——实现顺序存储栈和顺序存储队列的相关操作相关推荐

  1. 数据结构(八) -- C语言版 -- 栈和队列 - 队列的设计与实现

    我让你知道我有啥 零.读前说明 一.队列的概述 二.队列的操作 三.队列的两种存储结构的模型概述 四.顺序存储结构的队列及实现 4.1.顺序存储结构的传统队列简易实现与测试 4.2.顺序存储结构的队列 ...

  2. 顺序队和循环队列,队列篇(顺序队和循环队列入队出队操作)

    数据结构专升本学习,队列篇(顺序队和循环队列) 前言: 之前我们把栈学完了,比较简单,今天我们学习队列里面的顺序队和循环队列,说难不难,说简单不简单,我们需要认真学习,博主会尽力把原理和逻辑讲明白,不 ...

  3. (C语言版)链表(二)——实现单向循环链表创建、插入、删除、释放内存等简单操作

    http://blog.csdn.net/fisherwan/article/details/19754585 昨天写了单向链表的代码,今天上午把单向循环链表的程序给敲完了.链表的相关操作一样的,包含 ...

  4. C语言丨栈(一):顺序栈

    栈是限定仅在表尾进行插入或删除操作的线性表,表尾称为栈顶(top),表头称为栈底(bottom).栈的最主要特点就是"先进后出"(FILO),或"后进先出"(L ...

  5. 二、MySQL建库建表的相关操作

    1.创建数据库 格式: CREATE DATABASE 数据库名; 因为MySQL不区分大小写,所以哪种输入都可以.也就是说,CREATE DATABAE.Create DataBase.create ...

  6. 数据结构——链式队列解析(C语言版)

    摘自:数据结构学习--链式队列解析(C语言版) 作者:正弦定理 发布时间:2020-11-26 21:07:08 网址:https://blog.csdn.net/chinesekobe/articl ...

  7. 严蔚敏版数据结构(C语言版)算法实现代码

    严蔚敏版数据结构(C语言版)算法实现代码 数据结构(C语言版)代码实现 线性表 顺序表 链表 单向链表 静态链表01 静态链表02 双向循环链表 栈与队列 栈 顺序栈 进制转换 行编辑器 未完待续.. ...

  8. 数据结构(C语言版) 第 三 章 栈与队列 知识梳理 + 作业习题详解

    目录 一.栈 0.栈的基本概念 1.栈的实现 2.栈与递归 3.Hanoi塔问题 二.队列 0.队列的基本概念 1.队列的实现 2.循环队列 2.1循环队列的相关条件和公式: 3.链队列 4.链队列完 ...

  9. 《数据结构C语言版》——栈和队列详解(图文并茂),从零开始的学习

    哈喽!这里是一只派大鑫,不是派大星.本着基础不牢,地动山摇的学习态度,从基础的C语言语法讲到算法再到更高级的语法及框架的学习.更好地让同样热爱编程(或是应付期末考试 狗头.jpg)的大家能够在学习阶段 ...

最新文章

  1. poj3304(线段相交问题)
  2. 静态代码分析——字符串
  3. 列表生成式,生成器表达式,模块的使用
  4. %dn在c语言中是什么意思,请问C语言中 char far 是什么意思?
  5. 2019年网络规划设计师上午真题及答案解析
  6. JSON 格式化 显示到页面中
  7. 怀旧服大脚插件未能从服务器,《魔兽世界怀旧服》大脚插件 安装方法使用教程...
  8. USBKiller (U盘病毒专杀工具)绿色特别版V2.3 b0825
  9. pytorch卷积模型定义
  10. sql选择题_SQL选择
  11. 获得Azure订阅LoadBalancer的脚本
  12. python调用msf_使用python操纵metasploit简单小记
  13. html盒子中盒子排列,解析CSS的box model盒模型及其内的子元素布局控制
  14. 阿里云服务器搭建私人云盘
  15. STM32F407ZET6音乐播放器
  16. 打造自己的域名转向
  17. android 拍照水印日期,胶片日期水印app安卓版-胶片日期水印手机版预约v1.0-发卡屋...
  18. flink 单作业模式部署提交作业爆:Trying to access closed classloader. Please check if you store classloaders direc
  19. 北京航班延误_预测航班延误
  20. 老弟,来了?VUE+Nuxt.js+Koa+Vuex入门教程(一)仿写一个cnode网站

热门文章

  1. 从xtrabackup备份恢复单表【转】
  2. 软工Hello World!团队第二周博客汇总
  3. 分层设计 --java中的几种包
  4. 单调栈3_水到极致的题 HDOJ4252
  5. 平庸技术流,用 WebApi +AngularJS 实现网络爬虫
  6. struts2学习笔记二--准备struts2的学习和开发环境
  7. uniapp弹出框_uniApp上拉刷新,下拉加载,以及筛选功能
  8. java百度云文件上传_关于如何在自己项目集成百度云BCE文件上传STS方案
  9. because the following virtual functions are pure within
  10. 160 - 29 cosh.3