資料結構 棧的實現及應用場景

2021-09-25 21:43:58 字數 3384 閱讀 6170

目錄

一、棧二、順序棧的實現

​​​​​​三、鏈式棧的實現

四、棧的應用場景

棧限定僅在表尾進行插入和刪除操作的線性表。這一端被稱為棧頂,相對地,把另一端稱為棧底。向乙個棧插入新元素又稱作進棧、入棧或壓棧,它是把新元素放到棧頂元素的上面,使之成為新的棧頂元素;從乙個棧刪除元素又稱作出棧或退棧,它是把棧頂元素刪除掉,使其相鄰的元素成為新的棧頂元素。棧所需要的一般功能:

棧的分類:

/*棧的定義*/

typedef struct stack

stack, *stack_p;

/*初始化棧操作,n為需要開闢的空間*/

*stack_p init_stack(int n)

sp->stack = calloc(n, sizeof(int));//分配n塊資料

sp->size = n;//n塊資料域

sp->top = -1;//沒有存放任何資料 此時 棧頂=棧底

return sp;

}

/*判斷棧是否為空*/

bool isempty(stack_p sp)

/*判斷棧是否存放滿資料*/

bool isfull(stack_p sp)

/*入棧操作, 引數為需要入棧的資料, 以及對應存放的棧*/

bool push(int data, stack_p sp)

sp->top++;

sp->stack[sp->top] = data;

re

/*出棧操作*/

bool pop(int *data, stack_p sp)

*data = sp->stack[sp->top];//先取值

sp->top--;//棧頂往棧底方向移動

return true;

}

/*顯示棧空間中存放的資料*/

void showstackdata(stack_p sp)

int pos;

for(pos=0; pos<=sp->top; pos++) }

/*清空棧*/

void clearstack(stack_p sp)

/*定義棧儲存節點 以及 棧(棧頂與棧底指標)*/

typedef struct stack_node

stacknode,*stacknode_p;

typedef struct stack

stack,*stack_p;

/*初始化棧*/

stack_p init_stack()

return sp;

}

/*判斷棧是否為空*/

bool isempty(stack_p sp)

/*

入棧:輸入需要入棧的資料

(包含給對應資料建立棧儲存節點,不含頭結點)

*/void push(int data, stack_p sp)

}

/*出棧*/

bool pop(stack_p sp)

//出棧

stacknode_p stnode_p = sp->top;

sp->top = sp->top->next;

sp->size--;

//釋放空間

free(stnode_p);

return true;

}

/*遍歷棧*/

void showstack(stack_p sp)

//從棧頂一直列印到棧底

int pos;

stacknode_p tmp = sp->top;

for(pos=0; possize; pos++)

}

/*清空棧*/

bool clearstack(stack_p sp)

int pos;

int size = sp->size;//記錄棧中總數量

stacknode_p tmp;

for(pos=0; postop;

//指向下一資料

sp->top = tmp->next;

sp->size--;

//釋放資料

free(tmp);

} return true;

}

1、數制轉換

int main(int argc, char const *ar**)

while(1)

else break;

} return 0;

}

結果:2、括號匹配

int main(int argc, char const *ar**)

': pop(&tmp_data,sp);//當輸入為右括號或者右花括號則出棧對比

showstack(sp);

if(data == ')')//將括號反轉進行對比

data = '(';

else if (data == '}')

data = '

printf("\n");

} return 0;

}

測試結果:

3、行編輯程式4、迷宮求解5、表示式求值

6、運算子優先順序

7、遞迴

常用資料結構的應用場景

1 單向鏈結 單向鍊錶適用於只從一端單向訪問的場合,這種場合一般來說 1 刪除時,只適合刪除第乙個元素 2 新增時,只直接新增到最後乙個元素的後面或者新增到第乙個元素的前面 3 屬於單向迭代器,只能從乙個方向走到頭 只支援前進或後退,取決於實現 查詢效率極差。不適合大量查詢的場合。這種典型的應用場合...

Redis基礎 應用場景 資料結構及案例

解壓檔案,並建立軟體連線 tar zxvf redis 3.0.5.tar.gz c export servers ln s redis 3.0.5 redis 編譯redis原始碼 cd export servers redis make 先安裝gcc 將編譯後的可執行檔案安裝到 user loc...

常見資料結構應用場景

可以簡單的按照速度將通用資料結構劃分為 陣列和鍊錶 最慢 樹 較快 雜湊表 最快 增 刪 改 查是四大常見操作,不過其實可以濃縮為兩個操作 增和查。刪除操作和和修改操作都是建立在查詢操作上的,所以完美的資料結構應該是具有較高的插入效率和查詢效率。可以根據下圖選擇合適的通用資料結構 陣列在以下三個情形...