鏈式棧10種操作的實現

2021-06-29 13:57:24 字數 3486 閱讀 4584

操作

時間複雜度(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 年 4 月 3 日

* 版 本 號:008

*任務描述:針對鏈式棧,實現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 node

node,*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->next=null;

return ok;}

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

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

output(s);}

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

return false;}

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

while(s)

return num;}

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

coutdatanewnode->next=s->next;

s->next=newnode;}

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

sqstack temp=s->next;

free(s);

s=temp;

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

output(s);}

void reversestack(sqstack s)//反轉棧

s->next=p;

return;

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

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

q=q->next;

}p=p->next;

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

output(s);

return;

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

void clearstack(sqstack s)//清空棧

}s->next=null;

cout<<"棧清空成功。\n";}

void interaction()//輸出操作

順序棧10種操作的實現

操作 時間複雜度 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 資料結構分析與學...

棧 鏈式棧的實現

一 2 對於棧而言,通常允許插入 刪除操作的一端被稱為棧頂 top 另一端被稱為棧底 buttom 3 從棧頂壓入元素稱為進棧 push 4 從棧頂刪除元素稱為出棧 pop 棧是一種先進後出的線性表.二 可以採用單鏈表來儲存棧中的所有元素,這種結構的棧被稱為鏈棧。對於鏈棧而言,棧頂元素不斷改變,程式...

鏈式棧的實現

棧相比於鍊錶,它是一種特殊的資料模型,兩者既有聯絡 通過鍊錶的api函式可以改造出棧的api函式,這其中的原因在於兩者的底層邏輯是有相似的地方的,即 通過在鍊錶的頭部操作元素,就可以模擬出棧 區別在於,鍊錶和棧之間的對變數生命週期的管理不一樣 在實現棧的過程中,我們不可避免的用到了鍊錶的api函式 ...