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. Linux下mysql开机自启动

    1,cd /etc/init.d/ 2,chmod +x mysql 3,chkconfig add mysql 4,chkconfig --list             显示服务列表 如果看到m ...

  2. [AGC017D]Game on Tree

    [AGC017D]Game on Tree 题目大意: 一棵\(n(n\le10^5)\)个结点的树.A和B轮流进行游戏,A先手.每次删掉一棵子树,根结点不能删.最先不能操作的人输,问最后谁赢. 思路 ...

  3. Python3系列__01Python安装

    Python和Java一样是跨平台的,它可以运行在Windows.Mac和各种Linux/Unix系统上.所以你在一个平台上面上写的代码在另一个平台仍能正常运行. 要学习Python编程,你需要做的就 ...

  4. BZOJ 4710

    枚举几个同学分到了 对于每种特产求一个方案数(经典做法)乘起来 然后容斥 #include<bits/stdc++.h> using namespace std; #define rep( ...

  5. 【类与对象】--------java基础学习第六天

    类与对象 1. 对于面向对象的开发来讲也分为三个过程: OOA(面向对象分析) OOD(面向对象设计) OOP(面向对象编程) 2. 面向对象的基本特征 2.1. 封装:保护内部操作(属性,方法)不被 ...

  6. echarts、higncharts折线图或柱状图显示数据为0的点

    echarts.higncharts折线图或柱状图只需要后端传到前端一段json数据,接送数据的x轴与y周有对应数据,折线图或柱状图就会渲染出这数据. 比如,x轴表示美每天日期,y轴表示数量.他们的数 ...

  7. 详解node + mongoDb(mongoDb安装、运行,在node中连接、增删改查)

    一.序言 好久没写博客了,这次主要聊聊 node 和 mongoDb . 先说明一下技术栈  node + express + mongoose + mongoDb.这篇博客,主要讲述 mongoDb ...

  8. Array.from();Object.keys();Array.map()

    Array.from():方法从一个类似数组或可迭代对象创建一个新的数组形式: const bar = ["a", "b", "c"]; A ...

  9. C++的结构体指针传参

    typedef struct node{int n;node *left;}*tnode; 传参的时候注意用** void init(node **nn);int main(){tnode nna;i ...

  10. 使用Kubeadm(1.13+)快速搭建Kubernetes集群

    Kubeadm是管理集群生命周期的重要工具,从创建到配置再到升级,Kubeadm处理现有硬件上的生产集群的引导,并以最佳实践方式配置核心Kubernetes组件,以便为新节点提供安全而简单的连接流程并 ...