1. 程式人生 > >C++ 簡單實現壓棧出棧

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;
	}
  
  }

}


相關推薦

C++ 簡單實現

/********************************************************************** * Copyright (c)2015,WK S

C 程式區域性變數的理解

        寫這篇總結的緣由僅僅出於巧合,五一前幫一位同學看51的程式,在檢視彙編程式碼的時候(事實上我當時的彙編知識基本都還給了老師),無意中問起我“某個區域性變數的宣告怎麼沒有對應的彙編語句”,我沒有答出來。當時也只是把它當做一種常識給記了下來,平時不論還是在DSP

java入門---資料結構操作例項之的方法實現字串反轉

    以下例項演示了使用使用者自定義的方法 StringReverserThroughStack() 來實現字串反轉:import java.io.IOException; public class

實現一個,要求實現Push()、Pop(入)、Min(返回最小值)的時間複雜度為O(1)

這道題考查棧的知識點,要求實現一個棧,在對這個棧進行入棧和出棧以及返回最小棧元素時要求時間複雜度為O(1)。 方法一: 用兩個棧,一個正常出入棧,另一個存最小棧,入棧的時候第一個站正常入,最小棧如果為空或者要入的data比最小棧的棧頂元素小的時候才給最小棧入棧。

C語言實現連結串列、、佇列的基本操作

一、連結串列的基本操作#include <stdio.h> #include <stdlib.h> typedef struct LNode{ int data; struct LNode *next; }LNode,*LinkList; //頭插

C++】判斷順序順序的合法性

//判斷順序棧出棧順序的合法性思想: //給定一個入棧的字串pushstr,再給定一個出棧的字串popstr,根據棧的特性,判斷該出棧順序是否合法 //1.先驗證兩個字串的長度是否相等,不等,則肯定不合法;相等,再進行步驟2. //2.(1)判斷pushstr與popstr

簡單實現Fragment回退效果

public class MainActivity extends FragmentActivity implements OnClickListener {private FragmentA A;private FragmentB B;private FragmentC

遍歷C語言程式

#include<stdio.h> #include<malloc.h> #include<stdlib.h> typedef struct Node { int data; struct Node * pNext; }NODE,*

C語言實現的連結串列結構

#include"stdlib.h" //棧是一種先進後出的結構,如果用順序儲存結構來實現,進來的元素插入尾端 //出去的元素從尾端刪除,由於順序結構可以隨機訪問,比較容易實現。 //如果用連結串列來實現,會增大額外的指標開銷,進來的元素插入頭端,出去的元素從頭端刪除 //兩者入棧和出棧的時

的入頂(連結串列實現

基於連結串列實現入棧,出棧,取棧頂元素的操作 鏈式棧 入棧 (連結串列頭插) 比較方便 出棧 (連結串列頭刪) 標頭檔案

【資料結構】實現一個,要求實現Push()、Pop(入)、Min(返回最小值的操作)的時間複雜度為O(1)

實現一個棧,要求實現Push(出棧)、Pop(入棧)、Min(返回最小值的操作)的時間複雜度為O(1) 在棧中操作的話,push和pop的時間複雜度就是O(1),所以我們只用實現Min(返回最小值的操作)的時間複雜度為O(1), 思想就是用兩個棧,一個就是普通的存取資料的

資料結構之---C語言實現括號匹配(實現

wechat:812716131 ------------------------------------------------------ 技術交流群請聯絡上面wechat ----------------------------------------------

通過入實現數學表示式的計算

#include <iostream> #include <stack> #include <string> #include <cstring> using namespace std; class Exp {

實現一個Stack,要求實現Push()、Pop(入)、 Min(返回最小值的操作)的時間複雜度為O(1)

利用兩個棧 1. 一個用來儲存最小的元素 smin 2. 一個用來儲存所有元素 scur 3. 入棧時,scur直接壓入,smin棧頂與目標元素比較,若小之則壓入,否則不做處理 4. 出棧時,s

實現一個Stack,要求實現Push()、Pop(入)、Min(返回最小值的操作)的時間複雜度為O(1)

這裡的要求呢,跟我們平時的stack操作是一樣的,那什麼地方不同呢?多了一個min方法,並且要求時間複雜度為O(1),那該怎麼做呢?O(1)的意思就是說,要用了,直接就能拿到,就好比陣列直到下標一樣,直接取。 那麼如果能夠將一個棧的棧頂一直存放的都是最小值呢?

佇列】實現一個Stack,要求實現Push()、Pop(入)、Min(返回最小值的操作)的時間複雜度為O(1)

問題分析 要記錄從當前棧頂到棧底元素的最小值,很容易想到用一個變數,每push一個元素更新一次變數的值。那麼問題來了,當執行pop操作時,上一次的最小值就找不到了。 解決方法 方法1、 使用一個棧。元素x入棧時,執行一次push(x),再push(min

[轉] A*尋路算法C++簡單實現

track pos endpoint 障礙 close math.h 不存在 rec 節點 參考文章: http://www.policyalmanac.org/games/aStarTutorial.htm 這是英文原文《A*入門》,最經典的講解,有demo演示 ht

[數據結構(二)]七種排序算法的C++簡單實現

末尾 技術分享 下標 ima http 直接 wap temp 部分 一.冒泡排序(Bubble Sort) 基本思想:兩兩比較相鄰記錄的關鍵字,如果反序則交換,直到沒有反序的記錄為止。 //冒泡排序 void BubbleSort(int *p, int lengt

60行c++簡單實現中綴表示式轉字尾

中綴表示式轉字尾表示式演算法 使用棧進行輔助 對於符號±/(),定義為/優先順序為2,’(’(左括號)優先順序為3,右括號’)'優先順序最低為0 對於一個表示式 如果當前字元為數字: 輸出到輸出佇列中; 否則當前字元是運算子號或

超級瑪麗遊戲 C 簡單實現

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!