C++ 简单实现压栈出栈

/**********************************************************************
 * Copyright (c)2015,WK Studios
 * Filename:  stack.h
 * Compiler: GCC,VS,VC6.0  win32
 * Author:WK
 * Time: 2015 3 29
 ************************************************************************/
#include<iostream>
using namespace std;

const int SIZE=10;

class Stack
{
private:
    int stck[SIZE];//数组用于存放栈中数据
    int tos;       //栈顶位置(数组的下标)

public:
	Stack();
	void push(int ch); //函数声明向栈中中压入数据fuction
    int  pop();       //声明从堆栈中弹出数据fuction
	void ShowStack(); //声明显示堆栈数据function

};
/**********************************************************************
 * Copyright (c)2015,WK Studios
 * Filename:  stack.cpp
 * Compiler: GCC,VS,VC6.0  win32
 * Author:WK
 * Time: 2015 3 29
 ************************************************************************/
#include"stack.h"
    //构造函数,初始化栈的实现
Stack::Stack()
{

   tos=0;
   stck[SIZE]=0;
}
   //向栈中压入数据函数的实现
void Stack::push(int ch)
{
   if(tos==SIZE)
   {
      cout<<"Stack is full!\n";
	  return ;
   }
   stck[tos]=ch;
   tos++;
   cout<<"You have pushed a data into the Stack!\n";
}

  //从栈中弹出数据函数的实现
int Stack::pop()
{
   if(0==tos)
   {
     cout<<"Stack is empty!\n";
	 return 0;

   }
  tos--;
  return stck[tos];
}

//显示栈中数据的函数的实现
void Stack::ShowStack()
{
  cout<<"The content of Stack:\n";
	  if(0==tos)
	  {
	    cout<<"The Stack has no data!\n";
		return ;
	  }
  for(int i=tos-1;i>=0;i--)
  {
    cout<<stck[i]<<' ';

  }
   cout<<'\n';
}
/**********************************************************************
 * Copyright (c)2015,WK Studios
 * Filename:   main.cpp
 * Compiler: GCC,VS,VC6.0  win32
 * Author:WK
 * Time: 2015 3 29
 ************************************************************************/
#include"stack.h"

int main()
{
  cout<<endl;//换行的同时刷新缓冲区
  Stack ss;  //定义对象
  int x=0;
  char ch;
  cout<<"  <I>----- push data    to   Stack!\n";
  cout<<"  <O>----- pop  data    from Stack!\n";
  cout<<"  <S>----- show content of Stack!\n";
  cout<<"  <Q>----- Quit !!!!!!!\n";
  while(1)
  {

    cout<<"Please select an item:";
	cin>>ch;
	ch=toupper(ch);

	switch(ch)
	{
	case 'I':
		cout<<"Enter the value that you want to push:";
		cin>>x;
		ss.push(ch);
		break;

	case 'O':
		x=ss.pop();
		cout<<"pop "<<x<<" from Stack!\n";
		break;
	case 'S':
		ss.ShowStack();
		break;
    case 'Q':
		return 0;
		break;

	default :
		cout<<"You have iputted a wrong item!!!! Please try again !\n";
     continue;
	}

  }

}
时间: 2025-02-01 17:02:41

C++ 简单实现压栈出栈的相关文章

压栈出栈遍历栈实例代码

#include<stdio.h> #include<stdlib.h> #include<malloc.h> typedef struct Node//定义一个链表结构体 { int data; struct Node* pNext; }NODE,*PNODE; typedef struct Stack//定义一个栈结构体 { PNODE pTop; PNODE pBottom; }STACK,*PSTACK; void initStack(PSTACK); void

顺序栈的初始化入栈出栈以及打印栈的信息

使用的开发工具CLion CLion 2017.2.1 Build #CL-172.3544.40, built on August 2, 2017Licensed to CLion EvaluatorExpiration date: September 15, 2017JRE: 1.8.0_152-release-915-b6 x86_64JVM: OpenJDK 64-Bit Server VM by JetBrains s.r.oMac OS X 10.12.4   1 #include

BZOJ 3786 星系探索 Splay维护树的入栈出栈序

题目大意:给出一棵树,要求有以下这些操作:1.求出一个节点到根的点权和.2.将一个节点的父亲改变.3.将一个子树中的每一个节点都加上一个权值. 思路:LCT就不用想了,因为有子树操作.然后就是一个很神奇的东西了,就是Splay维护树的入栈出栈序.这个玩应是做了这个题之后才知道的.但是感觉真的很dio. 首先,我们先按照题意,将树建出来.然后从根开始深搜,这样一个点进入DFS函数和出DFS函数的时候就会有两个时间点,就是入栈的时间和出栈的时间.然后利用Splay维护一个序列,就是入栈出栈的顺序.在

栈-出栈序列正确性分析

问题很简单:在栈的性质下,1~n的数字按顺序入栈,给出它们的出栈序列,判定该序列是否合理. 相比于之前遇到过的“求解所有可行出栈序列”,本问题的复杂度着实降低了不少.不过要把这个过程正确地通过code模拟出来,在逻辑的处理上也需要注意不少细节. 下面先来讲讲处理的方法: 程序输入:n以及给定的出栈序列,出栈序列不妨设为q[n+1],其中q[1]~q[n]顺序保存正确性未知的出栈序列. 由于入栈是按顺序入栈,可以不用额外的数组保存,仅需要一个递增的标志A表示即可.同时,出栈序列也需要一个指针B来保

栈的链式存储结构和入栈出栈操作

参考<大话数据结构>P98~99——栈的链式存储结构. 进栈: 出栈: 举个简单的例子: 代码和解释如下(VS2012测试通过): 1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 typedef string status;//用书上推荐的status返回是否成功,C++中的模板类string比字符数组char[]更方便 6 7 //栈的结点 8 //包含data,和指向下一个结点

两栈共享空间的存储结构和入栈出栈操作

参考<大话数据结构>P95~96——两栈共享存储空间. 当两个栈的需求空间有相反关系时,也就是一个栈增长时,另一个栈在缩短,可以采用两栈共享空间结构.这是针对两个具有相同数据类型的栈的一个设计技巧. 举个简单的例子: 代码和解释如下(VS2012测试通过): 1 #include <iostream> 2 #include <string> 3 using namespace std; 4 5 #define MAXSIZE 6 //本例中栈满共6个元素 6 typed

栈、堆内存到底是如何申请的,方法是如何入栈出栈的——内存结构理解学习

Lee出品,转载请注明出处http://blog.csdn.net/hnulwt/article/details/42934365 对于软件开发者而言,理解和熟悉计算机内存知识是很基础的.今天我就来翻翻旧账,回顾看看有哪些点遗漏了,在此共同学习. 提起内存,我们常常想到三个区域: 1,静态区,静态变量 static variables / constant  ,常量,静态变量就存储在静态区域,这个区域比较简单,只需要知道怎么通过地址访问他就行了. 2,堆,也叫堆栈(这里要注意堆栈 和 栈 是不同

入栈/出栈

栈的push/pop操作 #include<iostream> #include<vector> using namespace std; struct node { int data; node *next; }; struct stack_queue { node *bottom; node *top; }; //入栈 stack_queue *push_stack(stack_queue *ST, int num) { //stack_queue *s=new stack_q

编程实现栈的入栈/出栈操作

完整代码如下,其实队栈都只是链表的一种变化而已 #include <stdio.h> #include <stdlib.h> typedef struct student * PNode; typedef struct stacklink * PStack; typedef struct student { int data; PNode next; }Node; typedef struct stacklink { PNode zhandi; PNode top; }Stack;

23 入栈 出栈

分析下列程序输出:string int main() { StackS; char x,y; Initstack(S); x='n';y='g'; Push(S,x);Push(S,'i');Push(S,y); Pop(S,x);Push(S,'r');Push(S,'t');Push(S,x); Pop(S,x);Push(S,' s'); while(!StackEmpty(S)) { Pop(S,y);printf(y); }; Printf(x); } 分析:看完如下的结果即可.补充一