「抽象」《大話資料結構》第四章 棧

2021-10-05 18:16:32 字數 2383 閱讀 9992

首先棧是一種線性表,他比較特殊,只能在表尾進行插入和刪除操作。

資料型別:

棧的每乙個元素依然是結構體,有資料域,有棧頂指標。

對應操作:

1 初始化操作,建立乙個空棧。

2 釋放棧的分配空間

3 在棧頂插入新的元素

4 刪除掉棧頂的元素

5 返回棧的元素個數

根據棧的抽象資料型別,現在一一實現它。

typedefint selemtype;

typedef

struct

sqstack;

top記錄的是陣列data中最後面有值的元素的下標。就是棧頂指標的意思啦。

1 判斷是否棧滿,即 top 的值是否為 (size-1),若棧滿,則返回error。

2 top 自增,成為下乙個元素空間的下標。

3 把新的值賦給這個元素空間,然後返回操作成功標誌。

**如下:

status push

(sqstack *stack, selemtype data)

1 判斷棧是不是出空了,即top是否小於0.

2 把要刪除的元素賦給返回指標delete_data。

3 top自減。返回操作成功標誌。

**如下:

status pop

(sqstack *stack, selemtype *delete_data)

主要是為了最大限度利用開闢的儲存空間,由於是在乙個陣列空間內,故兩個棧的資料型別必須相同。

1 開闢陣列空間

2 定義整型變數 top1 和 top2

**如下:

typedef

struct

sqdoublestack;

其中 sqdoublestack 可以用來定義結構體型別的變數。

對於共享空間的棧入棧需要注意:

1 判斷棧滿,top1 + 1 == top2。

2 判斷是入哪個棧。

**如下:

status doublestack_push

(sqdoublestack *stack, selemtype data,

int stack_number)

else

if(stack_number ==2)

return ok;

}

1 判斷需要操作哪個棧

2 top1或者top2移動後,需要判斷是否溢位

**如下:

status doublestack_pop

(sqdoublestack *stack, selemtype* delete_data,

int stack_number)

*delete_data = stack->data[stack->top1];}

else

if(stack_number ==2)

*delete_data = stack->data[stack->top2];}

return ok;

}

棧頂放在鍊錶的頭部,棧底放在尾部。棧頂指標指向第乙個結點。

定義鏈棧的結構**:

typedef

struct stacknode

stacknode,

*linkstackptr;

typedef

struct linkstack

linkstack;

可以根據前面的單鏈表插入新值的操作猜測下入棧操作:

1 需要新開闢乙個結點

2 新結點的next指向top指標所指的結點(原來的第乙個結點,即原來的棧頂)

3 top指向新的結點,count++

**如下:

status push_linkstack

(linkstack *top, selemtype new_data)

同樣,我們也來回顧下之前的鍊錶刪除操作,以此推出出棧:

1 *delete_data = top->top->data,棧頂的資料幅值給形參指標

2 delete_node = top->top;

3 top->top = top->top->next。棧頂元素後乙個結點的位址給top指標

4 釋放delete_node

5 top->count–

**如下:

status pop_linkstack

(linkstack *top, selemtype *delete_data)

「抽象」《大話資料結構》第四章 隊

佇列是只允許在一端進行插入操作,而在另一端進行刪除操作的線性表。資料部分 線性表的資料元素同型別,相鄰元素具有前驅和後驅關係 操作部分 1 建立空佇列 2 釋放佇列的儲存空間 3 從隊尾插入新的元素 4 從隊頭刪除元素 迴圈佇列其實就是佇列的順序儲存結構,即元素在儲存空間上是連續的。定義front指...

《大話資料結構》第四章棧與佇列

1.棧是限定僅在表尾進行插入和刪除的線性表 允許插入和刪除的一端稱為棧頂,另一端稱為棧底,不含任何元素的棧稱為空棧,棧又稱為後進先出的線性表,簡稱lifo結構。1.1 棧的插入操作,叫做進棧,也稱壓棧,入棧。子彈如彈夾 棧的刪除操作,叫做出棧。子彈彈出彈夾 1.2 先進棧的元素是不是只能最後出棧?答...

《大話資料結構》第四章棧與佇列

1.棧是限定僅在表尾進行插入和刪除的線性表 允許插入和刪除的一端稱為棧頂,另一端稱為棧底,不含任何元素的棧稱為空棧,棧又稱為後進先出的線性表,簡稱lifo結構。1.1 棧的插入操作,叫做進棧,也稱壓棧,入棧。子彈如彈夾 棧的刪除操作,叫做出棧。子彈彈出彈夾 1.2 先進棧的元素是不是只能最後出棧?答...