棧的鏈式結構

2021-08-01 23:51:17 字數 2060 閱讀 4343

**:

/* 2 棧的鏈式結構實現 */

#include 

#include 

#include 

typedef

inttype;

//元素型別別名

//宣告順序棧結構體

typedef

struct

stack  

stack;  

void

init(stack**);

//初始化

void

push(stack**,type);

//入棧

type pop(stack**);//出棧

void

clear(stack**);

//清空

bool

isempty(stack*);

//判斷棧是否已滿

intlength(stack*);

//返回棧的元素個數

void

ergodic(stack*);

//遍歷棧中元素

intsearch(stack*,type);

//搜尋,返回具棧頂首次出現位置

intmain()  

//遍歷測試

printf("遍歷棧中元素:"

);  

ergodic(top);  

scanf("%*[^\n]"

);  

scanf("%*c"

);  

//搜尋測試

printf("輸入要搜尋的元素:"

);  

scanf("%d"

,&elem);  

intpos =search(top,elem);  

if(pos)  

else

printf("查詢失敗!\n"

);  

//棧長度測試

count = length(top);  

//棧清空測試  棧清空測試與出棧測試不能同時進行

//clear(&top);

//出棧測試

printf("棧中有%d個元素\n"

,count);  

while

(count--)  

printf("出棧元素是:%d\n"

,pop(&top));  

//棧長度測試

printf("棧中有%d個元素\n"

,length(top));  

return

0;  

}  //棧初始化

//因為要更新棧頂指標本身的值,所以要用二級指標

void

init(stack** ss)  

//入棧操作

//因為要更新棧頂指標本身的值,所以要用二級指標

void

push(stack** ss,type e)  

else

printf("記憶體申請失敗,緩衝區將清空!\n"

);  

}  //出棧操作

//因為要更新棧頂指標本身的值,所以用二級指標

type pop(stack** ss)  

}  //判斷是否為空

bool

isempty(stack* s)  

//返回棧的長度

intlength(stack* s)  

return

count;  

}  //遍歷棧

void

ergodic(stack* s)  

printf("\n"

);  

}  //搜尋棧中元素

//返回元素距離棧頂的位置,如果有多個相同值,則返回首次出現的位置

intsearch(stack* s,type e)  

pos++;  

s=s->next;  

}  return

pos;  

}  //清空棧

//因為要更新棧頂指標本身的值,所以要用二級指標

void

clear(stack** ss)  

}  

鏈式結構棧

三 佇列的鏈式儲存結構 單鏈表 1 定義 1.使用有頭結點的單鏈表來模擬 2.使用head和rear指標來模擬佇列 3.head為佇列頭的前乙個節點,rear為隊尾節點 2 隊尾插入操作 在rear後面插入元素 3 刪除隊頭元素 刪除fhead的下乙個元素 如果刪除前只有乙個元素,那麼在刪除後要讓r...

棧的鏈式儲存結構

棧的鏈式表示,即鏈棧。由於棧的操作是線性表操作的特例,因此鏈棧可以看成運算受限的單鏈表。其特點如下 鏈棧無棧滿問題,空間可擴充 插入和刪除僅在棧頂處執行 鏈式棧的棧頂在鏈頭 適合於多棧操作。stacklist.h include class listint int data listint link...

棧的鏈式儲存結構

棧的鏈式儲存結構稱為鏈棧,對於鏈棧來說,基本不存在棧滿的情況,除非記憶體已經沒用可以使用的空間,如果真的存在這種情況的話,那麼就說明此時的計算機作業系統已經快要宕機了,那麼我們就沒必要再去關注溢位的問題了 關於鏈棧的結構如下所示 關於鏈棧的程式定義如下所示 typedef struct stackn...