顺序栈的操作,整数进栈,取栈顶元素,栈内剩余元素

// main.cpp

//  stack_quhao

//  Created by duanqibo on 2019/6/29.

//  Copyright © 2019年 duanqibo. All rights reserved.

//  顺序栈的操作,整数进栈,取栈顶元素,栈内剩余元素

#include <iostream>

#include <stdio.h>

#include <stdlib.h>

const int maxsize=6;

/*

typedef struct student

{

int No;

char name[20];

char sex[2];

int age;

}DataType;

*/

typedef struct seqstack

{

int data[maxsize];

int top;

}SeqStk;

//栈初始化

int InitStack(SeqStk *stk)

{

stk->top=0;

return 1;

}

//判断是否显空栈

int EmptyStack(SeqStk *stk)

{

if(stk->top==0)

return 1;

else

return 0;

}

//入栈

int Push(SeqStk *stk,int x)

{

if(stk->top==maxsize-1)

{

printf("栈已满!");

return 0;

}

else

{

stk->top++;

stk->data[stk->top]=x;

return 1;

}

}

//出栈

int Pop(SeqStk *stk)

{

if(EmptyStack(stk))

{

printf("栈已空!");

return 0;

}

else

{

stk->top--;

return 1;

}

}

//取栈顶元素

int GetTop(SeqStk *stk)

{

if(EmptyStack(stk))

return 0;

else

return stk->data[stk->top];

}

void menu()

{

printf("*************************\n");

printf("    1.进栈(-1结束)\n");

printf("    2.输出栈顶元素\n");

printf("    3.剩余栈元素\n");

printf("    0.退出系统\n");

printf("*************************\n");

}

int main(int argc, const char * argv[])

{

SeqStk SK;

int n;

int ch;

InitStack(&SK);

menu();

while(1)

{

printf("请输入:");

scanf("%d",&ch);

switch(ch)

{

case 1:

//printf("\n---客户取号---\n");

scanf("%d",&n);

while(n!=-1)

//for(i=0;i<6;i++)

{

Push(&SK,n);

scanf("%d",&n);

}

break;

case 2:

if(!EmptyStack(&SK))

{

n=GetTop(&SK);

Pop(&SK);

printf("\n从栈中出来的数是:%d\n",n);

break;

}

else

printf("\n无人等待服务!\n");

break;

case 3:

printf("\n栈中剩余元素...\n");

while(!EmptyStack(&SK))

{

n=GetTop(&SK);

Pop(&SK);

printf("\n栈中剩余的元素为 %d!\n",n);

}

break;

case 0:

exit(1);

break;

}

}

}

原文地址:https://www.cnblogs.com/duanqibo/p/11107366.html

时间: 2024-10-13 10:06:41

顺序栈的操作,整数进栈,取栈顶元素,栈内剩余元素的相关文章

洛谷P1573 栈的操作 [2017年6月计划 数论11]

P1573 栈的操作 题目描述 现在有四个栈,其中前三个为空,第四个栈从栈顶到栈底分别为1,2,3,…,n.每一个栈只支持一种操作:弹出并 压入.它指的是把其中一个栈A的栈顶元素x弹出,并马上压入任意一个栈B中.但是这样的操作必须符合一定的规则才能进行.规则1:A栈不能为空.规则 2:B栈为空或x比B栈栈顶要小. 对于给定的n,请你求出把第四个栈的n个元素全部移到第一个栈的最少操作次数. 由于最少操作次数可能很多,请你把答案对1000007取模. 输入输出格式 输入格式: 一行,一个n 输出格式

【数据结构之旅】顺序栈入门操作

说明: 书中已有关于顺序栈的类型定义.栈初始化.入栈操作,显然这些都是比较理论的算法,书中并没有给出一个完整可以执行的例子,这对初学者学习在理解上会有一定的难度,因此,需要编写一个简单的例子来理解栈的最基本操作. 1.程序功能 通过使用栈来编写一个程序,实现两个数的交换. 2.程序代码及注释 代码及注释如下: #include<stdio.h> #include<stdlib.h>    //导入stdlib.h模块是为了使用sizeof函数 typedef struct{    

数据结构——顺序栈及其操作

1 #include<iostream> 2 using namespace std; 3 4 typedef int SElemType; 5 typedef int Status; 6 #define OK 1 7 #define ERROR 0 8 9 10 #define MAXSIZE 100 //栈的最大空间 11 12 13 //顺序栈的存储结构 14 typedef struct SqStack 15 { 16 SElemType *base; //栈底指针 17 SElemT

栈的操作

学习了数据结构之的顺序表与链表之后,再去接触栈的操作,觉得简单多了.自己就想用栈来实现下实际功能.但是遇到了麻烦(对于初学者来说),不管结果怎样,这都是一次成长的过程,虽然现在问题没有解决,但是我先把他以微博的形式记录下来,以遍我在以后能解决它. #include<stdio.h> #include<stdlib.h> #include<malloc.h> #include"string.h" typedef char NoteType; //#in

对栈的操作和算法实现

一.栈的定义 从数据结构角度看,栈也是线性表,其特殊性在于栈的基本操作都是线性操作的子集,它是操作受限的线性表. 栈(stack)是限定仅在表尾进行插入或删除操作的线性表. 栈一般分为两种: 静态栈:用数组实现: 动态栈:用链表实现. 一般用的比较多的都是动态栈.如果学会了链表,其实对栈的操作就比较简单了. 二.栈的结构 空栈的结构:(其实就是栈顶和栈顶都指向一个不存放有效数据的头结点) 存有结点的栈结构:(栈顶指针指向栈顶结点,栈底指针指向头结点) 三.用C语言实现 /* 2016年9月17日

c语言将2进制数转化为10进制数(栈的初始化,进栈,出栈)

1 //c语言描述 将2进制转化为10进制 2 #include <stdio.h> 3 #include <stdlib.h> 4 #include <math.h> 5 #define STACK_INIT_SIZE 20 6 #define //栈满后再分配 7 8 typedef char ElemType; 9 typedef struct 10 { 11 ElemType *base; //栈底 12 ElemType *top; //栈底 13 int s

使用栈Stack对整数数值的运算表达式字符串进行运算C#

这里如果对于形如字符串“((6+((7+8)-9)*9+8/2)-3)/2”的运算表达式进行运算.接触过此类的同学知道这种存在着运算符优先级的表达式,不能直接从左到右进行运算,我们使用OperandStack操作数栈和OperatorStack操作符栈,对操作符进行比较,确定优先级后,取出操作数进行运算. 算法思想如下: 1.首先确定操作的符的优先级,*./大于+.-,(大于*./,*./或者+.-一起时,排在前面的运算符优先,)的优先级最小,且)与(相遇时抵消 2.从左到右遍历字符串,每次遍历

数据结构——栈的操作

栈是先进后出的,队列是先进先出的. 栈顶在上面,栈是向上生长的,每次数据操作是压栈,最后的数据元素指向栈顶. 实例:用两个栈实现队列 题目:用两个栈实现一个队列,队列的声明如下,请实现他的连个函数,分别完成在队列尾部插入结点和在队列头部删除结点的功能. 1 template<typename T>class CQueue 2 { 3 public: 4 CQueue(void); 5 ~CQueue(void); 6 void appendTail(const T& node); 7

HDU 5818 Joint Stacks ——(栈的操作模拟,优先队列)

题意:有两个栈A和B,有3种操作:push,pop,merge.前两种都是栈的操作,最后一种表示的是如果“merge A B”,那么把B中的元素全部放到A中,且满足先入后出的栈原则. 分析:显然,我们给每一个节点配备一个时间戳即可.我一开始的思路是直接开两个优先队列进行直接模拟,merge操作就是把一个栈的元素全部倾倒到另一个栈内,但是会出现的问题是,如果有一个状态A和B的元素都相当多了,并且反复的进行merge操作,那么每一次merge都意味着大量的元素进出,肯定会超时的.因此,我们需要优化,