操作
時間複雜度(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函式 ...