【資料結構】棧的應用--行編輯程式(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 = 64 };
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 "Edlin.h"
int main()
{
SeqStack<char> mystack;
char ch;
cout << "please enter:" << endl;
cout << "* @:delete all $:delete one *" << endl;
while ((ch = getchar()) != EOF)
{
switch (ch)
{
case '@':
mystack.clear();
cout << "please enter:" << endl;
break;
case '$':
mystack.pop();
break;
default:
mystack.push(ch);
break;
}
}
mystack.show();
return 0;
}
相關文章
- 【資料結構】棧的應用--括號的匹配(c++)資料結構C++
- 【資料結構】棧的應用--數制轉換(c++)資料結構C++
- 【資料結構】棧的應用——中綴表示式求值(c++)資料結構C++
- 資料結構筆記-棧的應用資料結構筆記
- 資料結構學習(C++)——棧應用(表示式求值) (轉)資料結構C++
- 前端資料結構(1)之棧及其應用前端資料結構
- 【資料結構】順序棧的實現(c++)資料結構C++
- 資料結構與演算法 | 棧的實現及應用資料結構演算法
- 資料結構-棧資料結構
- 資料結構 - 棧資料結構
- 波波的資料結構-棧資料結構
- AssetHook:Android應用資源資料執行時編輯工具HookAndroid
- @資料結構C/C++版(5)《棧的順序儲存結構以及進棧和出棧操作的實現》資料結構C++
- 從零開始學資料結構和演算法(三)棧與棧的應用資料結構演算法
- 資料結構之「棧」資料結構
- 資料結構之——棧資料結構
- javascript資料結構 -- 棧JavaScript資料結構
- 資料結構之棧資料結構
- 資料結構(1):棧資料結構
- JS 裡的資料結構 - 棧JS資料結構
- 資料結構與演算法-資料結構(棧)資料結構演算法
- 資料結構與演算法--簡單棧實現及其應用資料結構演算法
- Java版-資料結構-棧Java資料結構
- js資料結構之棧JS資料結構
- JavaScript資料結構之-棧JavaScript資料結構
- 資料結構03-棧資料結構
- 資料結構:棧詳解資料結構
- JavaScript資料結構之棧JavaScript資料結構
- js資料結構--棧(stack)JS資料結構
- JavaScript資料結構02 - 棧JavaScript資料結構
- 資料結構筆記——棧資料結構筆記
- 資料結構—棧/佇列資料結構佇列
- Python資料結構——棧Python資料結構
- 資料結構-佇列、棧資料結構佇列
- 【資料結構】棧的基礎知識(無程式碼)資料結構
- 資料結構(筆試題-棧(入棧出棧)資料結構筆試
- 【資料結構】堆疊(順序棧、鏈棧)的JAVA程式碼實現資料結構Java
- 【資料結構】——堆及其應用資料結構