数据结构——顺序栈(sequence stack)
/* sequenceStack.c */
/* 栈 先进后出(First In Last Out,FILO)*/ #include <stdio.h>
#include <stdlib.h>
#include <stdbool.h> #define MAXSIZE 100 /* 栈数据结构 */
/*
——————————
| data[2] | <--- top
———————————
|
——————————
| data[1] |
———————————
|
——————————
| data[0] |
———————————
*/
typedef struct {
int data[MAXSIZE]; /* 数组 */
int top; /* 栈指针 0表示栈底,-1表示空栈 */
} SeqStack; /* 栈函数声明 */
void interface(void);
SeqStack *initializeSeqStack();
bool isEmptySeqStack(SeqStack*);
int pushSeqStack(SeqStack*, int);
int popSeqStack(SeqStack*);
int peekSeqStack(SeqStack*); /* 程序主函数入口 */
int main(){
SeqStack *s = initializeSeqStack();
int flag, number; interface();
for(;;){
printf("Command: ");
scanf("%d", &flag);
switch(flag){
case : return ; break;
case :
printf("Enter number: ");
scanf("%d", &number);
pushSeqStack(s, number);
break;
case :
if(isEmptySeqStack(s))
printf("SeqStack is empty!\n");
else
printf("value: %d\n", popSeqStack(s));
break;
case :
if(isEmptySeqStack(s))
printf("SeqStack is empty!\n");
else
printf("value: %d\n", peekSeqStack(s));
break;
}
} return ;
} /* 用户界面 */
void interface(void){
puts("+*********************************+");
puts("+ 0, quit 退出 +");
puts("+ 1, push 压入 +");
puts("+ 2, pop 弹出 +");
puts("+ 3, peek 查看 +");
puts("+*********************************+");
} /* 栈函数实现 */
/* 初始化栈 */
SeqStack *initializeSeqStack(){
SeqStack *s = (SeqStack*)malloc(sizeof(SeqStack));
s->top = -;
return s;
}
/* 判断栈是否为空 */
bool isEmptySeqStack(SeqStack *s){
if(s->top==-){
return true;
}
return false;
}
/* 入栈 */
int pushSeqStack(SeqStack *s, int num){
/* 栈满不能入栈 */
if(s->top==MAXSIZE-){
return ;
}else{
s->data[++s->top] = num;
return ;
}
}
/* 出栈 */
int popSeqStack(SeqStack *s){
return s->data[s->top--];
}
/* 取栈顶元素 */
int peekSeqStack(SeqStack *s){
return s->data[s->top];
}
数据结构——顺序栈(sequence stack)的更多相关文章
- 数据结构 - 顺序栈的实行(C语言)
数据结构-顺序栈的实现 1 顺序栈的定义 既然栈是线性表的特例,那么栈的顺序存储其实也是线性表顺序存储的简化,我们简称为顺序栈.线性表是用数组来实现的,对于栈这种只能一头插入删除的线性表来说,用数组哪 ...
- 数据结构 - 顺序栈的实现 C++
顺序栈封装 C++ 使用C++对顺序栈进行了简单的封装,实现了栈的基本操作 封装方法: pop(),top(),size(),empty(),push() 代码已经过测试 #pragma once # ...
- Java数据结构之栈(Stack)
1.栈(Stack)的介绍 栈是一个先入后出(FILO:First In Last Out)的有序列表. 栈(Stack)是限制线性表中元素的插入和删除只能在同一端进行的一种特殊线性表. 允许插入和删 ...
- 数据结构之栈(stack)
1,栈的定义 栈:先进后出的数据结构,如下图所示,先进去的数据在底部,最后取出,后进去的数据在顶部,最先被取出. 栈常用操作: s=Stack() 创建栈 s.push(item) 将数据item放在 ...
- 数据结构之栈(stack)的实现
一.栈 1.定义 栈的英文为(stack),是一种数据结构 栈是一个先入后出(FILO-First In Last Out)的有序列表. 栈(stack)是限制线性表中元素的插入和删除只能在线性表的同 ...
- 数据结构--顺序栈--C++实现
#include <iostream> #define MaxSize 5000 using namespace std; template <typename T> clas ...
- 数据结构——Java实现顺序栈
一.分析 栈是限定仅在表的一端进行插入或删除操作的线性表,对于栈来说,操作端称为栈顶,另一端则称为栈底,栈的修改是按照后进先出的原则进行的,因此又称为后进先出的线性表. 顺序栈是指利用顺序存储结构实现 ...
- 【C#】【数据结构】005-栈:顺序栈
C#数据结构:顺序栈 1.自定义顺序栈结构: /// <summary> /// 顺序栈 /// </summary> /// <typeparam name=" ...
- 数据结构Java实现05----栈:顺序栈和链式堆栈
一.堆栈的基本概念: 堆栈(也简称作栈)是一种特殊的线性表,堆栈的数据元素以及数据元素间的逻辑关系和线性表完全相同,其差别是线性表允许在任意位置进行插入和删除操作,而堆栈只允许在固定一端进行插入和删除 ...
随机推荐
- Gin实现依赖注入
前言 依赖注入的好处和特点这里不讲述了,本篇文章主要介绍gin框架如何实现依赖注入,将项目解耦. 项目结构 ├── cmd 程序入口 ├── common 通用模块代码 ├── config 配置文件 ...
- 手风琴效果 animate
animate的手风琴效果 <style type="text/css"> * { margin: 0; padding: 0; } ul{ list-style: n ...
- eclipse激活jrebel
1.原本jrebel已经激活了,某天突然失效了.报错如下: JRebel: ERROR Failed to obtain seat. Unable to connect to license serv ...
- 【洛谷5438】【XR-2】记忆(数论)
[洛谷5438][XR-2]记忆(数论) 题面 洛谷 题解 很好的一道题目. 我们首先把所有数的每个质因子的出现次数模二,也就是把最大的完全平方因子给除掉.然后剩下部分一样的就可以产生\(1\)的贡献 ...
- 【UOJ#60】【UR #5】怎样提高智商
[UOJ#60][UR #5]怎样提高智商 题面 UOJ 题解 首先猜猜答案是\(4*3^{n-1}\).即前面的选啥都行,后面的搞搞就行了. 而打表(看题解),可以知道答案就是这个,并且每个问题都是 ...
- 通过Filebeat把日志传入到Elasticsearch
学习的地方:配置文件中预先处理字段数据的用法 通过Filebeat把日志传入到Elasticsearch Elastic Stack被称之为ELK (Elasticsearch,Logstash an ...
- C# 关于使用JavaScriptSerializer 序列化与返序列化的操作
//开始解析 //引用 //using System.Web.Script.Serialization; JavaScriptSerializer js = new JavaScriptSerial ...
- WinForms中动态给treeView的节点添加ContextMenuStrip,并绑定Click事件
生成ContextMenuStrip var docMenu = new ContextMenuStrip(); ToolStripMenuItem deleteMenuItem = new Tool ...
- curl命令查看时间信息
参考:https://blog.csdn.net/jackyzhousales/article/details/82799494 示例:curl www.baidu.com -w "time ...
- Java生鲜电商平台-高并发的设计与架构
Java生鲜电商平台-高并发的设计与架构 说明:源码下载Java开源生鲜电商平台以及高并发的设计与架构文档 对于高并发的场景来说,比如电商类,o2o,门户,等等互联网类的项目,缓存技术是Java项目中 ...