順序棧10種操作的實現

2021-06-29 13:57:24 字數 3696 閱讀 1665

操作

時間複雜度(t(n))

空間複雜度(s(n))

判斷是否為空

o(1)

o(1)

得到長度

o(1)

o(1)

得到棧頂元素

o(1)

o(1)

壓入元素

o(1)

o(1)

不需要開闢新記憶體或者開闢為常量的記憶體

彈出元素

o(1)

o(1)

反轉順序棧

o(n)

o(1)

氣泡排序

o(n^2)

o(1)

/*   資料結構分析與學習專欄

* 作 者: 高祥

* 完成日期: 2015 年 4 月 3 日

* 版 本 號:007

*任務描述:針對順序棧,實現10個基本操作

* 1:建立順序棧

* 2:判斷順序棧是否為空

* 3:求順序棧的元素個數

* 4:輸出順序棧

* 5:得到順序棧的棧頂元素

* 6:壓入元素

* 7:彈出元素

* 8:反轉當前順序棧

* 9:將順序棧公升序排序

* 10:清空順序棧

*主要函式:

* 1.status initstack(sqstack &s);//初始化棧:為棧分配初始空間

* 2.void reversecreatstack(sqstack &s);//逆序建立棧

* 3.status isempty(sqstack s);//判斷棧是否為空

* 4.int stacklength(sqstack s);//求棧的元素個數

* 5.void output(sqstack s);//輸出棧的元素

* 6.void gettop(sqstack s);//得到棧頂元素

* 7.void push(sqstack &s,elemtype elem);//壓入元素

* 8.void pop(sqstack &s);//彈出元素

* 9.void reversestack(sqstack &s);//反轉棧

* 10.void sortstack(sqstack &s);//棧元素排序

* 11.void clearstack(sqstack &s);//清空棧*/

#include#includeusing namespace std;

#define stack_init_size 100

#define stackincrement 10

#define ok 1

#define false 0

typedef int status;

typedef int elemtype;

typedef struct

sqstack;

status initstack(sqstack&s);//初始化棧:為棧分配初始空間

void reversecreatstack(sqstack&s);//逆序建立棧

status isempty(sqstack s);//判斷棧是否為空

int stacklength(sqstack s);//求棧的元素個數

void output(sqstack s);//輸出棧的元素

void gettop(sqstack s);//得到棧頂元素

void push(sqstack&s,elemtype elem);//壓入元素

void pop(sqstack &s);//彈出元素

void reversestack(sqstack&s);//反轉棧

void sortstack(sqstack&s);//棧元素排序

void clearstack(sqstack&s);//清空棧

void interaction();//輸出操作

int main()

break;

case 2:

if(isempty(s))

else

break;

case 3:

cout<<"棧中的元素個數是:"<>elem;

push(s,elem);

cout<<"壓入元素後的棧為:";

output(s);

break;

case 7:

pop(s);

break;

case 8:

reversestack(s);

cout<<"反轉後的棧為:";

output(s);

break;

case 9:

sortstack(s);

break;

case 10:

clearstack(s);

break;

default:

cout<<"請輸入正確的運算元字:";}}

return 0;}

status initstack(sqstack&s)//初始化棧:為棧分配初始空間

s.top=s.base;//棧頂指標等於棧底指標:表示棧為空

s.stackcapacity=stack_init_size;//容量

s.stacklength=0;//元素個數

return ok;}

void reversecreatstack(sqstack&s)//逆序建立棧

s.stacklength=length;

cout<<"建立的棧為:";

output(s);}

status isempty(sqstack s)//判斷棧是否為空

return false;}

int stacklength(sqstack s)//求棧的元素個數

void output(sqstack s)//輸出棧的元素

pointer--;

}cout<=s.stackcapacity)//容量不足,擴充容量

s.top=s.base+s.stackcapacity;//更新棧頂指標

s.stackcapacity+=stackincrement;//更新棧的容量

}*s.top=elem;//填入元素

s.top++;//更新棧頂指標

s.stacklength++;//更新元素個數}

void pop(sqstack &s)//彈出元素

s.top--;

s.stacklength--;

cout<<"刪除元素後的棧為:";

output(s);}

void reversestack(sqstack&s)//反轉棧

return;

}cout<<"棧為空,無法反轉。\n";}

void sortstack(sqstack&s)//棧元素排序

if(after==s.base)

after--;

}before--;

}cout<<"公升序排序後的棧為:";

output(s);

return;

}cout<<"棧為空,無法排序。\n";}

void clearstack(sqstack&s)//清空棧

void interaction()//輸出操作

鏈式棧10種操作的實現

操作 時間複雜度 t n 空間複雜度 s n 判斷是否為空 o 1 o 1 得到長度 o n o 1 得到棧頂元素 o 1 o 1 壓入元素 o 1 o 1 彈出元素 o 1 o 1 反轉順序棧 o n o 1 氣泡排序 o n 2 o 1 資料結構分析與學習專欄 作 者 高祥 完成日期 2015 ...

順序棧的基本操作實現

這些都是頭函式裡的內容,也就是儲存之後,可以直接 對其進行呼叫。其中的乙個變數stacklen是用來記錄棧 的長度的,其實,這個變數可以不要,只是剛開始寫時 給它加上了,所以就按這樣寫了,感覺跟順序表的寫法 差不多 include include includeusing namespace std...

棧的基本操作及實現(順序棧)

順序儲存結構來實現的棧稱為順序棧,它利用一組位址連續的儲存單元存放自棧底到棧頂的資料元素,同時附設乙個指標top來指示當前棧頂的位置。注意,是c 特有的用來表示引用呼叫,所以此檔案應以.cpp字尾儲存 結構體為 define maxsize 50 typedef int elemtype typed...