基本資料結構 表 棧和佇列

2021-07-27 03:39:37 字數 1674 閱讀 8579

(1)棧(後進先出)的兩種實現方式:指標和表

用指標方式實現棧的基本操作:

createstack(void)

//.h檔案

#ifndef _stack_h_

struct node

;struct node;

typedef

struct node* ptrtonode;

typedef ptrtonode stack;

#endif

stack createstack(void)

在makeempty中若棧不為空則不停出棧直到棧為空

void makeempty(stack s)

//判斷棧是否為空

int isempty(s)

入棧和出棧的基本操作(重要),此處的棧都有乙個頭結點

}二、棧的應用–表示式求值

如何將表示式變為字尾表示式

中綴表示式:a+b * c+(d * e+f) * g

轉化為字尾表示式:abc* + de * f+g * +

轉化過程:當讀取的是乙個運算元的時候立即輸出,如果是操作符的話,存入棧中,若是左括號,也要存入棧中,

(1)讀取到左括號,將棧中元素彈出並輸出,直到彈出的是左括號(注意只彈出但是不輸出)

(2)如果讀取到的是其他的符號(「+」,「-」,「*」,「\」,「(」),當前棧頂的優先順序高於要進棧的這個元素,則從棧中彈出元素直到遇到優先順序更低的符號為止,然後該元素入棧(注意:除非是遇到),否則(不會彈出的,也就是預設(優先順序最高

略過中間描述過程,用此方法得到字尾表示式。

表示式求值的時候:利用得到的字尾表示式,看見數字就入棧,遇到運算子就從棧中彈出兩個數字,計算求得結果,並將結果重新壓回到棧中。

尾遞迴有時候並不恰當,有可能因為資料量過於龐大使得堆疊溢位。

費遞迴的程式一般來說確實比等價的遞迴程式要快,但是速度優勢的代價卻是由於遞迴而使得程式清晰性變得不足。

佇列的特點:頭刪尾插,順序佇列保留陣列queue,front,rear

尾部插入:rear和size都加1,置queue[rear] = x

頭部刪除:size減1,front加1,返回值為queue[front]

普通佇列不論刪除還是插入,front和rear的值都是不斷增大的,很容易到達陣列的尾部,改進方法:使用迴圈佇列

迴圈佇列:佇列空:rear = front-1

基本資料結構 棧 佇列和鍊錶

棧 stack 實現的是一種依照先進先出 last in,first out,lifo 原則的結構,也就是說最後放入的元素總是最先被取出。佇列 queue 實現的是一種依照先進先出 first in,first out,fifo 原則的結構,也就是說最先放入的元素總是最先被取出。至於為什麼會存在這兩...

基本資料結構 佇列

佇列實現的是一種先進先出 first in,first out,fifio 的策略,佇列中的插入的操作稱為入隊 enqueue 佇列的刪除操作稱為出隊 dequeue 定義乙個陣列來實現佇列 public class queue public queue int n public boolean i...

基本資料結構 棧

基本資料結構 棧 一.線性資料結構 我們從四個簡單但重要的概念開始研究資料結構。棧,佇列,deques 雙向佇列 列表是一類資料的容器,它們資料元素之間的順序由新增或刪除的順序決定。一旦乙個資料元素被新增,它相對於前後元素一直保持該位置不變。諸如此類的資料結構被稱為線性資料結構。線性資料結構有兩端,...