c语言数组模拟栈和队列,简单用数组模拟顺序栈(c++)

**栈是一种操作受限制的线性表,太多官方的话我也不说了,我们都知道栈元素是先进后出的,它有两种存储结构,分别是顺序存储结构和链式存储结构。

**今天我先记一下顺序存储结构,后面我会加上链式存储结构的。

**我看到别人的顺序栈都是用别的方式来写的,我现在这里用的是一维数组,也就是用数组模拟。由于要用到bool型,所以我直接用c++来写,大家可以相应改成C语言的版本,并不难。

**顺序栈的操作 无非是基本的八个,分别是初始化,出栈,入栈,是否为空,是否为满,取栈顶元素,取有效元素个数,遍历。

**如果用静态数组模拟的话,不需要销毁栈,(我个人觉得 如果有误,请指正) 清空的话,直接初始化就行。顺序栈的示意图如下:

c语言数组模拟栈和队列,简单用数组模拟顺序栈(c++)_第1张图片

不多说了,直接给代码参考:

在这里我用拼音来代替函数,让新手看得明白一点,我这里用的是结构体来生成一个栈,这个栈有一百个格子,还有一个top指针,大家结合示意图来看就会很形象的。

# include

using namespace std;

typedef struct

{

int d[100];//定义一个长度为100的一维数组这里可以随便设置长度

int top;//栈顶指针

} Stack;

void chushihua(Stack * s);//初始化一个栈

bool em(Stack * s);//判断是否为空

bool full(Stack * s);//判断是否为满

bool push(Stack * s,int a);//入栈

bool pop(Stack * s,int *a);//出栈

bool ding(Stack * s,int *a);//取栈顶元素

int len(Stack * s);//取有效元素个数

void bianli(Stack * s);//遍历

*****************************************************************

函数部分:

*****初始化一个栈*****

void chushihua(Stack * s);

{

s->top=-1;  //结合示意图让top为-1  就是初始化这个栈

}

*****判断是否为空 *****

bool em(Stack * s)

{

if(-1==s->top)

return true;

else

return  false;

}

*****判断是否为满 *****

bool full(Stack * s)

{

if(99==s->top)//这里是因为数组的下标为零 所以对于一百来说 99就是最后一个“格子”

return true;

else

return false;

}

*****入栈*****

bool push(Stack * s,int a)

{

if(full(s))  //满了就不能入栈

return false;

else

{

s->top++;  //结合图  指针先加

s->d[s->top]=a;//  再把数据存进对应的“格子”

return true;

}

}

c语言数组模拟栈和队列,简单用数组模拟顺序栈(c++)_第2张图片

*****出栈*****

bool pop(Stack * s,int *a)

{

if(em(s))//  空的当然不能出栈

return false;

else

{

*a=s->d[s->top]; //把栈顶元素 付给 变量

s->top--; //指针减一

return true;

}

}

c语言数组模拟栈和队列,简单用数组模拟顺序栈(c++)_第3张图片

*****取栈顶元素*****

这里只是取栈顶元素 不对栈有任何操作

bool ding(Stack * s,int *a)

{

if(em(s)) //同理 空栈没有元素 就不行

return false;

else

{

*a=s->d[s->top]; // 把栈顶的元素赋值即可

return true;

}

}

*****取有效元素长度*****

由图我们可知,指针+1就是有效元素长度了

int len(Stack * s)

{

return s->top+1;

}

*****遍历*****

void bianli(Stack * s)

{

int i;

while(!em(s))//当不为空栈

{

pop(s,&i);  //我们就出栈并赋值

cout<

}

cout<

}

*****************************************************************

主函数部分(测试)

int main(void)

{

Stack s;

int a,c;

chushihua(&s);

push(&s,1);

push(&s,2);

push(&s,3);

push(&s,4);

push(&s,5);

ding(&s,&a);

cout<

bianli(&s);

return 0;

}

如图:

c语言数组模拟栈和队列,简单用数组模拟顺序栈(c++)_第4张图片

以上就是用数组模拟顺序栈的过程,如果有什么问题或者bug,请在下方评论,我目前会天天上论坛的。

简单用数组模拟顺序栈(c++版)适合新手

**栈是一种操作受限制的线性表,太多官方的话我也不说了,我们都知道栈元素是先进后出的,它有两种存储结构,分别是顺序存储结构和链式存储结构. **今天我先记一下顺序存储结构,后面我会加上链式存储结构的. ...

php模拟顺序栈基本操作

php模拟顺序栈基本操作 一.总结 写函数什么永远记住边界情况:比如 echo "栈已满!
" ;  栈已空这种,那就能多考虑几种情况,代码就很正宗了 1.对象 ...

java学习笔记(基础篇)—数组模拟实现栈

栈的概念 先进后出策略(LIFO) 是一种基本数据结构 栈的分类有两种:1.静态栈(数组实现) 2.动态栈(链表实现) 栈的模型图如下: 需求分析 在编写代码之前,我习惯先对要实现的程序进行需求分析, ...

使用JAVA数组实现顺序栈

1,首先总结一下线性表(分为顺序表和链接表,[即顺序存储结构和链式存储结构的区别])和栈(顺序栈和链接栈)还有队列(顺序队列和链接队列)的JAVA类库中的实现: java.util.ArrayList ...

salesforce零基础学习(七十六)顺序栈的实现以及应用

数据结构中,针对线性表包含两种结构,一种是顺序线性表,一种是链表.顺序线性表适用于查询,时间复杂度为O(1),增删的时间复杂度为O(n).链表适用于增删,时间复杂度为O(1),查询的时间复杂度为O(n ...

php中数组模拟队列、栈的函数以及数组指针操作

1,数组指针,current表示当前指针,输出其指向的元素:next表示指针移动到下一个元素:prev指针移动到上一个元素:end表示指针移动到最后一个元素:reset表示指针移动到第一个元素: &l ...

JavaScript数组模拟栈和队列

*栈和队列:js中没有真正的栈和队列的类型              一切都是用数组对象模拟的 栈:只能从一端进出的数组,另一端封闭       FILO   何时使用:今后只要仅希望数组只能从一端进 ...

数据结构之【栈】+十进制转d进制(堆栈数组模拟)

其实这篇文章开出来主要是水文章%% %% 栈--后进先出的婊 特点:只能在某一端插入和删除的特殊的线性表 操作:进栈--PUSH->向栈顶插入元素 出栈--POP-->将栈顶元素删除 实现 ...

数组模拟栈(C语言)

用数组模拟栈的实现: #include #include #define STACK_SIZE 100 typedef struct ...

随机推荐

CopyFile类通过调用这个类的delete(String filePath)方法可以组合成一个Cut类

package folderoperation; import java.io.File;/** * 注意它会删除文件,文件夹以及文件夹下的所有内容(根据指定的地址) * @author Dawn * ...

SSIS 项目部署模型

微软 BI 系列随笔 - SSIS 2012 基础 - SSIS 项目部署模型 关于部署 SSIS 2012 支持两种部署模型:项目部署模型和包部署模型. 使用项目部署模型可以将项目部署到 Integ ...

selenium如何跳转到iframe

处理iframe,selenium提供了3中方法: 1.html的frame有id,传入id 2.html的frame有name,传入name 3.先找到iframe的元素,再传入该元素对象 跳出if ...

【Android】数据的应用-使用sharedpreferences存储数据

Android应用开发SharedPreferences存储数据的使用方法 SharedPreferences是Android中最容易理解的数据存储技术,实际上SharedPreferences处理的 ...

PartialView 加载Js

地址记录:http://stackoverflow.com/questions/21186505/including-script-specific-to-an-asp-net-mvc4-view-o ...

查看linux信息

1.操作系统内核 cat /proc/version 2.操作系统版本 head -n 1 /etc/issue # 查看操作系统版本 3.查看cpu信息 more /proc/cpuinfo --- ...

自学Python2.7-collections系列

Python collections系列 Python拥有一些内置的数据类型,比如str, int, list, tuple, dict等, collections模块在这些内置数据类型的基础上,提供 ...

[python]多线程模块thread与threading

Python通过两个标准库(thread, threading)提供了对多线程的支持 thread模块 import time import thread def runner(arg): for i ...

web service简述,通俗易懂----转

一.Web Service简介 1.1.Web Service基本概念 Web Service也叫XML Web Service WebService是一种可以接收从Internet或者Intrane ...

《Entity Framework 6 Recipes》中文翻译 ---- 系列教程

为了方便大家的阅读和学习,也是响应网友的建议,在这里为这个系列做一个目录.在目录开始这前,我先来回答之前遇到的几个问题. 1.为什么要学习EF? 这个问题很简单,项目需要.这不像学校,没人强迫你学习! ...

你可能感兴趣的:(c语言数组模拟栈和队列)