Code

/*顺序表实现栈的一系列操作*/ 

#include<stdio.h>
#include<stdlib.h> #define Stack_Size 50 //设栈中元素个数为50
#define OK 1
#define ERROR 0 typedef struct
{
int elem[Stack_Size]; //用来存放栈中元素的一维数组
int top; //用来存放栈顶元素的下标,top为 -1 表示空栈
}SeqStack; /**********************各个子函数的定义*********************/
int initStack(SeqStack *S); //初始化顺序栈
void push(SeqStack *S,int n); //顺序栈进栈运算
void pop(SeqStack *S); //顺序栈出栈运算
int getTop(SeqStack *S,int *s); //读取栈顶元素 int main()
{
SeqStack *S;
int choice;
while(true)
{
printf("*****************Please enter your choice*****************\n\n");
printf(" choice 1:Stack initialization\n");
printf(" choice 2:Into the stack\n");
printf(" choice 3:Out of the stack\n");
printf(" choice 4:Read the stack elements\n");
printf(" choice 0:exit\n\n");
scanf("%d",&choice);
switch(choice)
{
case :
(initStack(S)==)?printf("initStck success.\n"):printf("initStack ERROR\n");
break;
case :
int n;
printf("Please enter the number into the stack elements:");
scanf("%d",&n);
push(S,n);
break;
case :
pop(S);
break;
case :
int* s;
(getTop(S,s)==)? printf("栈顶元素是:%d.\n",*s):printf("An empty stack error!!!!\n"); //三目运算符
break;
case :
exit();
break;
default:
printf("ERROR!!\n");
exit();
break;
}
}
return ;
} /**********************各个子函数功能的实现*********************/
int initStack(SeqStack *S) //初始化顺序栈
{
if(S!=NULL)
{
S->top=-; //置为空栈
return OK;
}
else return ERROR; //内存空间不足
}
void push(SeqStack *S,int n) //进栈 ,将元素压入栈中
{
int n1,n2;
if(((S->top)+n)<=Stack_Size-) //压入栈中的元素不能超过栈的最大存储
{
printf("Please enter into the stack elements in turn:\n");
for(n1=;n1<n;n1++)
{
scanf("%d",&n2);
S->top++; //移动栈顶指针
S->elem[S->top]=n2;
}
printf("%d个元素依次进栈成功\n",n);
}
else
{ //栈空间不够
printf("ERROR There is insufficient space on the stack.\n");
}
}
void pop(SeqStack *S)
{ //栈顶元素出栈
int a;
if(S->top==-)
{ //栈为空,操作失败
printf("An empty stack error!!!!\n");
}
else
{
a=S->elem[S->top];
S->top--;
printf("栈顶元素%d出栈成功.\n",a); //出栈成功
} }
int getTop(SeqStack *S,int *s) //获取栈顶元素
{
if(S->top==-)
{ //栈为空,操作失败
return ERROR;
}
else
{
*s=S->elem[S->top]; //读取栈顶元素成功
return OK;
}
}

C语言实现顺序栈的初始化&进栈&出栈&读取栈顶元素的更多相关文章

  1. C语言实现链栈的初始化&进栈&出栈&读取栈顶元素

    /*链表实现栈的一系列操作*/ #include<stdio.h> #include<stdlib.h> #define OK 1 #define ERROR 0 typede ...

  2. C语言实现循环队列的初始化&进队&出队&读取队头元素&判空-2

    /*顺序表实现队列的一系列操作(设置flag标志不损失数组空间)*/ #include<stdio.h> #include<stdlib.h> #define Queue_Si ...

  3. C语言实现顺序栈

    C语言实现顺序栈,顺便加深刻++i,++i的区别 #include <stdio.h>#include <stdlib.h>#define maxsize 100/*写在前面的 ...

  4. C++语言实现顺序栈

    C++语言实现顺序栈 在写C语言实现顺序栈的时候,我已经向大家介绍了栈的特点以及介绍了栈的相关操作,并利用C语言实现了相关算法.在这里小编就不在继续给大家介绍了,需要温习的可以去我的博客看看.在这篇博 ...

  5. C语言实现顺序栈以及栈的特点

    什么是栈? 同顺序表和链表一样,栈也是用来存储逻辑关系为 "一对一" 数据的线性存储结构,如下图所示. 从上图我们看到,栈存储结构与之前所学的线性存储结构有所差异,这缘于栈对数据 ...

  6. C语言初始化——栈的初始化

    栈是一种具有后进先出性质的数据组织方式,也就是说后存放的先取出,先存放的后取出.栈底是第一个进栈的数据所处的位置,栈顶是最后一个进栈的数据所处的位置. 1.满栈与空栈 根据SP指针指向的位置,栈可以分 ...

  7. 数据结构(C语言版)顺序栈相关算法的代码实现

    这两天完成了栈的顺序存储结构的相关算法,包括初始化.压栈.出栈.取栈顶元素.判断栈是否为空.返回栈长度.栈的遍历.清栈.销毁栈.这次的实现过程有两点收获,总结如下: 一.清楚遍历栈的概念 栈的遍历指的 ...

  8. [实战演练]Intel面试题目 - 进栈出栈顺序问题

    电话面试中写C++,逻辑比较清楚的一个题目,一紧张就不能好好地写下来,漏洞百出.以前经常在完善的编译环境中写代码,换了一个白板子上写反而写的不通顺了,犯了一些基础错误,比如stack中的首个元素是to ...

  9. C语言数据结构-链式栈的实现-初始化、销毁、长度、取栈顶元素、查找、入栈、出栈、显示操作

    1.数据结构-链式栈的实现-C语言 //链式栈的链式结构 typedef struct StackNode { int data; struct StackNode *next; } StackNod ...

随机推荐

  1. Vue.js的安装及简单使用

    一.Vue简介 二.Vue.js的安装 2.1.npm安装 2.1.1.node.js介绍及安装 简介: 简单的说 Node.js 就是运行在服务端的 JavaScript. Node.js 是一个基 ...

  2. Android 动画 (1) 基础

    背景 坑, 最近打算在recyclerview item上加一个带动画的button,结果button无法连续点击,还以为是动画是同步的,必须要结束之后才能开始另一个动画,后来去掉recylervie ...

  3. centos7搭建zabbix3.0监控系统

    关闭防火墙和selinux systemctl stop firewalld.service                (停止防火墙) systemctl disable firewalld.se ...

  4. Java拦截器的实现原理

    对于某个类的A方法进行拦截,在A执行前插入一段代码,A执行后也插入一段代码 原理: 写个拦截器,拦截器中包含要插入前后执行的两段代码 interceptor { C();//C方法 D();//D方法 ...

  5. php基础-cookie&session

    设置cookie //设置cookie setcookie('key', 'value', time() + 60, '/'); 设置session //必须开启session session_sta ...

  6. Java 设计模式(概述)

    设计模式的三个分类                                                                                   创建型模式:对象 ...

  7. js 阻止事件执行

    三种阻止事件执行的方式 event.preventDefault() event.stopPropagation() return false event.preventDefault() 阻止特定事 ...

  8. c# ef 排序字段动态,构建动态Lambda和扩展方法OrderBy

    1.动态构建排序 Lambda /// <summary> /// 获取排序Lambda(如果动态排序,类型不同会导致转换失败) /// </summary> /// < ...

  9. ucore代码分析

    lab2: 总共分为四个包一个文件,分别为: boot: 操作系统加载程序代码 kern: 操作系统内核代码 libs: 相关的库和数据结构 tools: 相关编译链接调试工具 Makefile: 构 ...

  10. windows 10 64位机器上 安装部署

    mi这个博客写的不错 https://www.cnblogs.com/dingguofeng/p/8709476.html 安装redis 可视化工具后 ,新建连接 名称随意,注意端口号是否有误默认6 ...