資料結構 棧 順序棧和鏈棧

2021-10-04 18:25:41 字數 4712 閱讀 4010

順序棧(基於陣列的順序棧)

#include

#include

#include

typedef

enum status

status;

typedef

int elemtype;

typedef

struct sqstack

sqstack;

//函式宣告

//基於陣列的順序棧

status initstack

(sqstack *s,

int sizes)

;//初始化棧

status isemptystack

(sqstack *s)

;//判斷棧是否為空

status gettopstack

(sqstack *s, elemtype *e)

;//得到棧頂元素

status clearstack

(sqstack *s)

;//清空棧

status destroystack

(sqstack *s)

;//銷毀棧

status stacklength

(sqstack *s,

int*length)

;//檢測棧長度

status pushstack

(sqstack *s, elemtype data)

;//入棧

status popstack

(sqstack *s, elemtype *data)

;//出棧

void

show

(void);

//顯示視窗

intjudge_int

(void);

//使使用者輸入整數

status initstack

(sqstack *s,

int sizes)

status isemptystack

(sqstack *s)

else

}status gettopstack

(sqstack *s, elemtype *e)

else

else}}

status clearstack

(sqstack *s)

else

else}}

status destroystack

(sqstack *s)

else

}status stacklength

(sqstack *s,

int*length)

else

}status pushstack

(sqstack *s, elemtype data)

status popstack

(sqstack *s, elemtype *data)

else

}void

show

(void

)int

judge_int

(void

)//防止使用者亂輸入其他的字元

else}}

j = len-1;

for(m=

0;m)// 將字元重新轉換為數字

return num;

}int

main

(void

)else

break;}

case2:

//判斷棧是否為空

else

else

}break;}

case3:

//得到棧頂元素

break;}

case4:

//清空棧

else

break;}

case5:

//銷毀棧

else

break;}

case6:

//檢測棧的長度

break;}

case7:

//入棧

else

if(s.top == s.size -1)

else

else

}break;}

case8:

//出棧

else

else

}break;}

case9:

//退出程式

default:}

}while

(choice !=9)

;system

("pause");

return0;

}

鏈棧

#include

#include

#include

#define stack_h_included

typedef

enum status

status;

typedef

int elemtype;

typedef

struct stacknode

stacknode,

*linkstackptr;

typedef

struct linkstack

linkstack;

//函式的宣告

//鏈棧

status initlstack

(linkstack *s)

;//初始化棧

status isemptylstack

(linkstack *s)

;//判斷棧是否為空

status gettoplstack

(linkstack *s,elemtype *e)

;//得到棧頂元素

status clearlstack

(linkstack *s)

;//清空棧

status destroylstack

(linkstack *s)

;//銷毀棧

status lstacklength

(linkstack *s,

int*length)

;//檢測棧長度

status pushlstack

(linkstack *s,elemtype data)

;//入棧

status poplstack

(linkstack *s,elemtype *data)

;//出棧

void

show

(void);

//顯示介面

intjudge_int

(void);

//使使用者輸入整數

status initlstack

(linkstack *s)

status isemptylstack

(linkstack *s)

else

}status gettoplstack

(linkstack *s,elemtype *e)

else

}status clearlstack

(linkstack *s)

else

}status destroylstack

(linkstack *s)

return success;

}status lstacklength

(linkstack *s,

int*length)

else

}status pushlstack

(linkstack *s,elemtype data)

new->data = data;

new->next = s->top;

s->top = new;

s->count++

;return success;

}status poplstack

(linkstack *s,elemtype *data)

else

}void

show

(void

)int

judge_int

(void

)//防止使用者亂輸入其他的字元

else}}

j = len-1;

for(m=

0;m)// 將字元重新轉換為數字

return num;

}int

main

(void)do

else

break;}

case2:

//得到棧頂元素

break;}

case3:

//清空棧

else

break;}

case4:

//銷毀棧

else

break;}

case5:

//檢測棧的長度

break;}

case6:

//入棧

break;}

case7:

//出棧

else

break;}

case8:

//退出程式

default:}

}while

(choice !=8)

;system

("pause");

return0;

}

學習鏈棧後,可以利用鏈棧實現逆波蘭計算器(本博主的另一篇文章)

資料結構 棧的實現(順序棧和鏈棧)

棧介面,描述棧的抽象資料型別,泛型引數t表示資料元素的資料型別 public inte ce sstack 棧有兩種基本的實現 順序棧,實現棧介面 public class seqstack implements sstack 預設構造,構造容量為64的空棧 public seqstack 判斷棧是...

棧結構 順序棧 鏈棧

定義 棧是一種與線性表相似的線性結構。不同之處是當需要對節點做增刪操作時,只能操作棧頂的節點,因此具有先進後出 或者後進先出 的特點。按儲存結構的不同,可分為順序棧和鏈棧。棧結構的幾個屬性 adt stack elemtype為型別識別符號 資料關係 r 資料操作 1 stackseq initst...

C 實現資料結構 順序棧和鏈棧

2020年8月8日 週六 天氣晴 不悲嘆過去,不荒廢現在,不懼怕未來 用c 實現了簡單的順序棧和鏈棧類,成員函式實現了棧的基礎功能 isempty push pop top 並且用實現的棧解決了兩個問題 進製轉換和判斷表示式是否有效,是用vs2019實現的,每個函式的功能都新增了一定注釋,由於用了模...