資料結構之線性表 棧的順序儲存

2021-07-31 23:15:48 字數 3077 閱讀 1021

1 棧的基本概念

需要說明的是,棧也是乙個線性表,也就是說棧元素具有線性關係。只不過它是一種特殊的線性表而已。它的特殊之處在於限制了線性表插入和刪除的位置,他始終只在棧定進行插入刪除操作。這也就使得:棧底是固定的,最先進棧的只能在棧底,只能最後乙個出棧。具體描述如下圖所示

2棧的常用操作以及具體實現

(1)建立棧

建立棧相當於建立乙個順序儲存的線性表

//建立棧相當於建立乙個順序儲存的線性表

seqstack * seqstack_create(int capacity)

(2)銷毀棧

銷毀棧相當於順序表的銷毀

//銷毀棧相當於銷毀鍊錶

void seqstack_destory(seqstack * stack)

(3)清空棧

清空棧相當於順序表的清空

//清空棧相當於清空線性表

void seqstack_clear(seqstack *stack)

(4)進棧

進棧相當於在順序表的尾部插入元素

//棧插入元素相當於在順序表的尾部插入元素

int seqstack_push(seqstack * stack, void *item)

(5)出棧

出棧相當於在順序表的尾部刪除元素

//棧彈出元素相當於從線性表的尾部刪除元素

void *seqstack_pop(seqstack * stack)

(6)獲取棧頂元素

獲取棧頂元素相當於獲取順序表的尾部元素

//獲取棧頂元素相當於求鍊錶的尾部元素

void *seqstack_top(seqstack * stack)

(7)獲取棧的容量

//求棧的大小相當於求鍊錶的長度

int seqstack_size(seqstack * stack)

(8)棧內資料的大小

//求棧的容量相當於求鍊錶的容量

int seqstack_capacity(seqstack *stack)

3 棧的具體實現以及測試案例

#ifndef _my_seqstack_h_

#define _my_seqstack_h_

//順序棧的設計與實現

typedef void seqstack;

seqstack * seqstack_create(int capacity);

void seqstack_destory(seqstack * stack);

void seqstack_clear(seqstack *stack);

int seqstack_push(seqstack * stack, void *item);

void *seqstack_pop(seqstack * stack);

void *seqstack_top(seqstack * stack);

int seqstack_size(seqstack * stack);

int seqstack_capacity(seqstack *stack);

#endif//_my_seqstack_h_

#include"seqstack.h"

#include"seqlist.h"

#include#include #include//建立棧相當於建立乙個順序儲存的線性表

seqstack * seqstack_create(int capacity)

//銷毀棧相當於銷毀鍊錶

void seqstack_destory(seqstack * stack)

//清空棧相當於清空線性表

void seqstack_clear(seqstack *stack)

//棧插入元素相當於在順序表的尾部插入元素

int seqstack_push(seqstack * stack, void *item)

//棧彈出元素相當於從線性表的尾部刪除元素

void *seqstack_pop(seqstack * stack)

//獲取棧頂元素相當於求鍊錶的尾部元素

void *seqstack_top(seqstack * stack)

//求棧的大小相當於求鍊錶的長度

int seqstack_size(seqstack * stack)

//求棧的容量相當於求鍊錶的容量

int seqstack_capacity(seqstack *stack)

#include"seqstack.h"

#include#include #includeint main()

//建立棧

stack = seqstack_create(20);

//入棧

for (i = 0; i < 10; i++)

//棧的屬性

printf(" len : %d \n", seqstack_size(stack));

printf("capacity : %d \n", seqstack_capacity(stack));

printf("top : %d\n", *((int *)seqstack_top(stack)));

//元素出棧

while (seqstack_size(stack) > 0)

seqstack_destory(stack);

printf("hello world!\n");

}

資料結構之線性表 順序儲存

從新在學習一遍資料結構,每天盡量都寫點!fuction the list struct by xiaolong date 2012年 03月 13日 星期二 16 50 12 cst 功能 線性表的順序儲存實現 主要功能 include include define max size 20 defi...

資料結構 線性表之順序儲存

第i個元素與第乙個元素的儲存位置滿足 loc ai loc a1 i 1 m include include include include 線性表的順序儲存 define max size 100 定義線性表最大長度 順序儲存的缺陷之一 typedef structdata typedef str...

資料結構之線性表 順序儲存

線性表作為一種最簡單的資料結構,在資料的管理和運用方面有著很大的作用,而這種特殊的資料集合,其自身有著很強的特點 線性表 線性表是n個型別相同的資料元素的有限集合,且n大於0,除第乙個元素無直接前驅,和最後乙個元素沒有直接後繼以外,其餘的每個元素都有乙個直接前驅和乙個直接後繼,而且元素之間具有一對一...