首先棧是一種線性表,他比較特殊,只能在表尾進行插入和刪除操作。
資料型別:
棧的每乙個元素依然是結構體,有資料域,有棧頂指標。
對應操作:
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 先進棧的元素是不是只能最後出棧?答...