【資料結構】順序棧的實現(c++)
標頭檔案:
#pragma once
#include <iostream>
#include <assert.h>
using namespace std;
template<class Type>
class SeqStack
{
public:
SeqStack(size_t sz = INIT_SZ);
~SeqStack();
public:
bool empty()const;
bool full()const;
void show()const;
bool push(const Type &x);
bool pop();
void gettop(Type &x);
int length()const;
void clear();
void destory();
void quit_system(Type &x);
private:
enum{ INIT_SZ = 8 };
Type *base;
int capacity;
int top;
};
template<class Type>
SeqStack<Type>::SeqStack(size_t sz = INIT_SZ)
{
capacity = sz > INIT_SZ ? sz : INIT_SZ;
base = new Type[capacity];
assert(base != NULL);
top = 0;
}
template<class Type>
SeqStack<Type>::~SeqStack()
{
destory();
}
// 判斷棧是否滿了
template<class Type>
bool SeqStack<Type>::full()const
{
return (top >= capacity);
}
// 判斷是否為空棧
template<class Type>
bool SeqStack<Type>::empty()const
{
return (top == 0);
}
// 顯示
template<class Type>
void SeqStack<Type>::show()const
{
if (top == 0)
{
cout << "the stack is empty!" << endl;
return;
}
for (int i = top - 1; i >= 0; --i)
{
cout << base[i] << endl;
}
}
// 入棧
template<class Type>
bool SeqStack<Type>::push(const Type &x)
{
if (full())
{
cout << "the stack is full,can not enter!" << endl;
return false;
}
else
{
base[top] = x;
top++;
return true;
}
}
// 出棧
template<class Type>
bool SeqStack<Type>::pop()
{
if (empty())
{
cout << "the stack is empty,can not pop!" << endl;
return false;
}
else
{
top--;
return true;
}
}
// 獲得棧頂元素
template<class Type>
void SeqStack<Type>::gettop(Type &x)
{
x = base[top - 1];
}
// 求棧長度
template<class Type>
int SeqStack<Type>::length()const
{
return top;
}
// 清空棧
template<class Type>
void SeqStack<Type>::clear()
{
top = 0;
}
// 摧毀棧
template<class Type>
void SeqStack<Type>::destory()
{
delete []base;
base = NULL;
capacity = top = 0;
}
// 退出系統
template<class Type>
void SeqStack<Type>::quit_system(Type &x)
{
x = 0;
}
主函式:
#include "SeqStack.h"
int main()
{
SeqStack<int> mystack;
int input = 1;
int value;
while (input)
{
cout << "****************************************************" << endl;
cout << "* [1] show [2] push *" << endl;
cout << "* [3] pop [4] gettop *" << endl;
cout << "* [5] length [6] clear *" << endl;
cout << "* [7] destory [8] quit_syntem *" << endl;
cout << "****************************************************" << endl;
cout << "please choose:";
cin >> input;
switch (input)
{
case 1:
mystack.show();
break;
case 2:
cout << "please enter the number:";
while (cin >> value, value != -1)
{
mystack.push(value);
}
break;
case 3:
mystack.pop();
break;
case 4:
mystack.gettop(value);
cout << value << endl;
break;
case 5:
cout << mystack.length() << endl;
break;
case 6:
mystack.clear();
break;
case 7:
mystack.destory();
break;
case 8:
mystack.quit_system(input);
break;
default:
break;
}
}
return 0;
}
相關文章
- 【資料結構】實現順序表(c++)資料結構C++
- 【資料結構】順序佇列的實現(c++)資料結構佇列C++
- @資料結構C/C++版(5)《棧的順序儲存結構以及進棧和出棧操作的實現》資料結構C++
- 【資料結構】堆疊(順序棧、鏈棧)的JAVA程式碼實現資料結構Java
- python實現基本資料結構第二篇(順序棧、鏈棧,順序隊、鏈隊)Python資料結構
- 資料結構 順序棧(c語言)資料結構C語言
- 資料結構:棧的基本概念、順序棧、共享棧以及鏈棧資料結構
- C語言資料結構:順序棧的建立、出入棧,以及使用順序棧實現十進位制轉十六進位制C語言資料結構
- 資料結構:線性表的順序實現2.2資料結構
- 【資料結構】實現順序表(c語言)資料結構C語言
- 順序棧的實現方式
- C++順序結構(3)、資料型別_____教學C++資料型別
- 資料結構實驗一:順序表的建立與操作實現、順序表實現約瑟夫環問題資料結構
- 資料結構c語言實現順序表基本操作資料結構C語言
- 基礎資料結構(一)---(最全)定長順序表的實現資料結構
- js實現資料結構--棧JS資料結構
- PHP實現簡單順序棧PHP
- 具體實現程式碼@資料結構探險——順序表資料結構
- Java棧資料結構的實現方式Java資料結構
- 資料結構之php實現棧資料結構PHP
- 順序棧與鏈式棧的圖解與實現圖解
- 資料結構練習題(順序表和單連結串列)C++資料結構C++
- 南郵資料結構實驗1.1 順序表的操作資料結構
- 資料結構:順序結構和鏈式結構的資料型別定義資料結構資料型別
- 資料結構 - 線性表 - 順序表資料結構
- 【資料結構】堆排序和模擬實現優先順序佇列!!資料結構排序佇列
- 順序結構
- 【資料結構】佇列(順序佇列、鏈佇列)的JAVA程式碼實現資料結構佇列Java
- 資料結構初階--二叉樹介紹(基本性質+堆實現順序結構)資料結構二叉樹
- c++模擬實現順序表C++
- 資料結構實驗之連結串列一:順序建立連結串列資料結構
- 考研資料結構-線性表-順序表資料結構
- 南郵資料結構實驗1.1:順序表的相關操作資料結構
- 資料結構-js實現棧和佇列資料結構JS佇列
- 資料結構_順序表_順序表的初始化、插入、刪除、修改、查詢列印(基於C語言實現)資料結構C語言
- 資料結構——單連結串列的C++實現資料結構C++
- python 資料結構之順序列表的實現Python資料結構
- python資料結構之棧、佇列的實現Python資料結構佇列