資料結構之順序棧(C++版)

來源:互聯網
上載者:User

標籤:選項   []   list   delete   必須   out   amp   初始化   分配   

#include <iostream>
#include <stdlib.h>
#define MAXLISTSIZE 100 //預設的儲存空間最大容量
using namespace std;
typedef string ElemType;
typedef struct{
ElemType *base; //儲存空間基址
int top; //棧頂指標
int stacksize; //允許的最大儲存空間以元素為單位
}Stack;

void InitStack(Stack &S);
void DestroyStack(Stack &S);
void Push(Stack &S);
void Pop(Stack &S);
void GetTop(Stack S);
void StackLength(Stack S);
void StackEmpty(Stack S);

int main(void)
{
Stack S;
int z;
cout << "+---------------------------+" << ‘\n‘;
cout << "|----------順序棧-----------|" << ‘\n‘;
cout << "+---------------------------+" << ‘\n‘;
cout << "提示:為保證您的操作得到儲存,請按正常順序退出系統^_^" << ‘\n‘;
do
{
cout << ‘\n‘ << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"--------------------------------" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ 主菜單 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+--------------------------------" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [1]----順序棧初始化操作 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [2]----順序棧的銷毀操作 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [3]----順序棧的入棧操作 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [4]----順序棧的出棧操作 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [5]----順序棧取棧頂元素 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [6]----順序棧求棧長操作 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [7]----順序棧的判空操作 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"+ [0]----退出系統 |" << ‘\n‘;
cout << ‘\t‘ << ‘\t‘ << ‘\t‘ <<"-----------------------------------" << ‘\n‘;
cout << "請輸入您的選擇:";
cin >> z;
switch(z)
{
case 0 : break;
case 1 : InitStack(S);break;
case 2 : DestroyStack(S);break;
case 3 : Push(S);break;
case 4 : Pop(S);break;
case 5 : GetTop(S);break;
case 6 : StackLength(S);break;
case 7 : StackEmpty(S);break;
default:cout << "無效選項!" << ‘\n‘;system("pause");
}
}
while(z!= 0);
}

void InitStack (Stack &S)
{
// 構造一個最大儲存容量為 maxsize 的空棧 S
int maxsize;
cout << "請輸入棧的最大儲存容量:";
cin >> maxsize;
if (maxsize == 0)
maxsize = MAXLISTSIZE;
S.base = new ElemType[maxsize];
if (!S.base) exit(1); //儲存分配失敗
S.stacksize = maxsize;
S.top = 0;//空棧中元素個數為0
system("pause");
}

void Push(Stack &S)
{
ElemType e;
int j, n;
if (S.stacksize == 0)
{
cout << "棧已銷毀或棧未初始化,請選擇1初始化棧" << endl;
system("pause");
return;
}
if (S.top == S.stacksize)
{
cout << "棧已滿,無法進行插入" << endl;
system("pause");
return;
}
cout << "請輸入壓入棧的元素個數(元素個數必須小於或等於" << S.stacksize - S.top << "):";
cin >> n;
cout << "請輸入壓入棧的元素:";
for(j = 0; j < n; j++)
{
cin >> e;
*(S.base + S.top) = e; // 插入新的元素 
++S.top; // 棧頂指標後移 
}
system("pause");
}

void Pop(Stack &S)
{
ElemType e;
int j, n;
if (S.stacksize == 0)
{
cout << "棧已銷毀或棧未初始化,請選擇1初始化棧" << endl;
system("pause");
return;
}
if (S.top == 0)
{
cout << "棧為空白,無法出棧" << endl;
system("pause");
return;
}
cout << "請輸入出棧的元素個數(出棧元素個數應小於或等於" << S.top << "):";
cin >> n;
cout << "出棧的元素為:";
for(j = 0; j < n; j++)
{
e = *(S.base + S.top-1); // 返回非空棧中棧頂元素
cout << e << ‘ ‘;
--S.top; // 棧頂指標前移
}
cout << endl;
system("pause");
}

void GetTop(Stack S)
{
ElemType e;
if (S.stacksize == 0)
{
cout << "棧已銷毀或棧未初始化,請選擇1初始化棧" << endl;
system("pause");
return;
}
if (S.top == 0)
{
cout << "棧為空白,無法擷取棧頂元素" << endl;
system("pause");
return;
}
e = *(S.base + S.top-1); // 返回非空棧中棧頂元素
cout << "棧頂元素為:" << e << endl;
system("pause");
}

void StackEmpty(Stack S)
{
if (S.stacksize == 0)
{
cout << "棧已銷毀或棧未初始化,請選擇1初始化棧" << endl;
system("pause");
return;
}
if(S.top == 0)
cout << "該順序棧為空白棧" << endl;
else
cout << "該順序棧不為空白棧" << endl;
system("pause");
}

void StackLength(Stack S)
{
if (S.stacksize == 0)
{
cout << "棧已銷毀或棧未初始化,請選擇1初始化棧" << endl;
system("pause");
return;
}
// 返回S的元素個數,即棧的長度
cout << "棧長為:" << S.top << endl;
system("pause");
}

void DestroyStack(Stack &S)
{
// 銷毀棧S,S不再存在
if (S.stacksize == 0)
{
cout << "棧已銷毀或棧未初始化,請選擇1初始化棧" << endl;
system("pause");
return;
}
delete[] S.base;
S.top = 0;
S.stacksize = 0;
cout << "棧已銷毀" << endl;
system("pause");
}

 

資料結構之順序棧(C++版)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.