線性表 棧 佇列

2021-06-27 01:32:10 字數 1731 閱讀 4058

輔助定義:

#define maxsize 5

#define ok 0

#define error 1

typedef int selemtype;

typedef int status;

棧(順序/鏈式)相關結構體定義:

//順序棧

typedef struct

sqstack;

//順序棧共享空間

typedef struct

sqdoublestack;

//鏈棧節點

typedef struct stacknode

stacknode, *pstacknode;

//棧結構體

typedef struct

linkstack;

兩個順序棧共享空間,在資料插入的實現:

status pushdouble(sqdoublestack *s, selemtype e, int stacknumber)

if (stacknumber == 1) else if(stacknumber == 2)

return error;

}

鏈棧插入與彈出操作:

status pushlinkstack(linkstack *s, selemtype e)

status poplinkstack(linkstack *s, selemtype *e)

pstacknode p = s->top;

*e = s->top->data;

s->top = s->top->next;

free(p);

s->count--;

return ok;

}

佇列(順序/鏈式)佇列順序儲存(迴圈佇列)

這樣可以防止假溢位,並且充分利用空間。設定兩個指標,front指向佇列的頭,rear指向佇列尾部元素的下乙個位置,當佇列滿時,佇列還存在乙個空間,用來存放rear指標。如圖:

佇列空的時候:front == rear;佇列滿時:(rear+1)%queuesize == front。(queuesize是佇列長度)

佇列長度:(rear - front + queuesize)%queuesize。

//迴圈佇列結構

typedef struct

sqqueue;

//初始化

status initqueue(sqqueue *q)

佇列的鏈式儲存

相當於單鏈表,入隊相當於在單鏈表尾部插入資料,出隊相當於在單鏈表頭部刪除資料。下面給出其結構體定義,具體實現可參考單鏈表操作。

//佇列的鏈式儲存節點

typedef struct queuenode

queuenode, *pqueuenode;

//佇列的鏈式儲存

typedef struct

queue, *pqueue;

線性表 棧,佇列

1.3 棧 棧是一種先進後出的資料結構。只能在一端進行插入和刪除操作的特殊線性表。將資料進入棧稱為壓棧,資料出去稱為彈棧。壓棧 public void push t t 彈棧 public t pop 讓首結點指向第乙個結點的下乙個結點 head.next oldfirst.next 元素個數 1 ...

線性表 棧和佇列

線性表是n個元素的有限序列。表示方法有兩種,一種是順序表示,一種是鏈式表示。順序表示即採用一組位址連續的儲存單元依次儲存線性表的資料元素,通常採用陣列來實現 鏈式表示是用一組任意的儲存單元儲存線性表的資料元素,每一結點包含兩個域 資料域和指標域,資料域儲存資料,指標域儲存後繼儲存位址資訊,實現為 i...

DataStructure 線性表 棧 佇列

這裡是水水水的資料結構課的筆記 1.線性表 一些無腦的操作 低配vector,線性表無序有序都可以通過下標快速訪問。但是修改操作耗時大,建議不太靈活,多組讀取的資料使用 include using namespace std template typename e class list list c...