(二)線性結構 堆疊實現線性表的基本操作

2021-09-02 00:14:02 字數 2586 閱讀 4199

堆疊的用途:函式呼叫、遞迴、回溯演算法、表示式求值

例1:計算機如何進行表示式求值?對算術表示式(中綴表示式)

例2:求字尾表示式

由兩類物件構成:運算數和運算符號(不同運算符號優先順序不一樣)

結論:需要有種儲存方法,能順序的儲存運算數,並在需要的時候「倒序」輸出,此時堆疊就起作用了。

堆疊的抽象資料型別描述

定義:具有一定操作約束的線性表,只在一端(棧頂,top)做插入(入棧push)、刪除(出棧pop),後入先出(last in first out,lifo)

資料物件集:乙個有0個或多個元素的又窮線性表

操作集:長度為maxsize的堆疊

線性表的基本操作(堆疊實現):

stack createstack(int maxsize):生成乙個最大長度為maxsize的空堆疊

int isfull(stack s,int maxsize):判斷堆疊s是否已滿

void push(stack s,elementtype item):在堆疊中壓入item元素

#include typedef int elementtype;

#define maxsize 100

#define error

typedef struct snode *stack;

struct snode;

void push(stack ptrs, elementtype item)

else

}

int isempty(stack s):判斷堆疊s是否為空

elementtype pop(stack s):刪除並返回棧頂元素

elementtype pop(stack ptrs)

else

return (ptrs->data[(ptrs->top)--]); //將元素自上而下乙個個彈出

}

棧的順序儲存(陣列方式)實現:通常由乙個一維陣列和乙個記錄棧頂元素位置的變數組成。

struct dstacks;

void push(struct dstack *ptrs, elementtype item, int tag)

if (tag == 1)

ptrs->data[++(ptrs->top1)] = item; //將元素壓入第乙個陣列的後面

else

ptrs->data[--(ptrs->top2)] = item; //將元素壓入第二個陣列的前面

}elementtype pop(struct dstack *ptrs, elementtype item, int tag)

else

return ptrs->data[(ptrs->top1)--]; //從前往後彈出元素

} else

else

return ptrs->data[(ptrs->top2)++]; //從後往前彈出元素

}}

棧的鏈式儲存(鍊錶方式)實現:即單鏈表,叫鏈棧。插入和刪除操作只能在鏈棧頂進行。棧頂指標top應在鍊錶的頭部

堆疊初始化,建立空棧

#include #include typedef int elementtype;

#define maxsize 100

#define error

typedef struct snode *stack;

struct snode;

stack createstack() //堆疊初始化,建立空棧

int isempty(stack s) //判斷棧是否為空

堆疊元素的插入

void push(elementtype item, stack s)   //插入元素

堆疊元素的刪除

elementtype pop(stack s)

else

}

堆疊的應用:中綴表示式求值。首先將中綴表示式轉換為字尾表示式,從頭到尾讀取中綴表示式的每個物件,對不同物件按不同的情況處理。

轉換法則:

1.運算數:直接輸入

2.左括號:壓入堆疊

3.右括號:將棧頂的運算子彈出並輸出,直到遇到左括號(出棧,不輸出)

4.運算子:如果優先順序大於棧頂運算子時,則把他壓棧;

如果優先順序小於棧頂運算子時,將棧頂運算子彈出並輸出;再比較新的棧頂運算子,知道該運算子大於棧頂運算子優先順序為止

5.如果各物件處理完畢,則把堆疊中存留的運算子一併輸出。

資料結構(二) 線性表

線性表是最簡單最常用的資料結構,是一種典型的線性儲存結構。定義 線性表是由n n 0 個資料元素 結點 a1 a 2 an 組成的有限序列。n為表的長度。當n 0,為 空表 n 0時,為 a1,a 2,an 邏輯特徵 非空的線性表只有乙個頭結點,也只有乙個終結點,頭結點只有乙個直接後繼結點,而沒有直...

mysql 線性表 資料結構(二)線性表 鍊錶

通常情況下,鏈結可分為單鏈表 雙向鍊錶和迴圈鍊錶三種常用型別。一 單鏈表基本操作的實現 使用鏈式儲存結構來實現的線性表稱為鍊錶。首元結點 頭結點 頭指標 空指標。1.單鏈表的型別定義 typedef struct lnode 結點型別 lelemtype data 資料域 struct lnode ...

實驗二 線性表的基本操作

一 實驗目的 1 會定義線性表的順序儲存型別。2 熟悉c或c 程式的基本結構,掌握程式中的使用者標頭檔案 實現檔案和主檔案之間的相互關係及各自的作用。3 熟悉對線性表的一些基本操作和具體的函式定義。4 熟悉turboc或vc操作環境的使用以及多檔案程式的輸入 編輯 除錯和執行的全過程。二 實驗內容 ...