資料結構 棧

2021-09-24 20:30:47 字數 2460 閱讀 6335

棧是對新增資料和運算元據有限制的資料結構。有這「先來後服務」的思想,棧可被應用到遞迴這一思想中。棧又分為順序棧(雙向棧),鏈棧。

1:順序棧

順序棧的資料結構定義:

#ifndef stack_h_

#define stack_h_

#include #include #define maxsize 20

typedef structsqstack;

int push(sqstack *s);

int pop(sqstack *s);

void init(sqstack *s);

int result(sqstack *s);

#endif

順序棧的操作:

#define _crt_secure_no_warnings 1

#include "stack.h"

//初始化棧

void init(sqstack *s)

//入棧

int push(sqstack *s)

int number = 0;

scanf("%d", &number);

s->top++;

s->data[s->top] = number;

return s->data[s->top];

}//出棧

int pop(sqstack *s)

int elem = s->data[s->top];

s->top--;

return elem;

}

2:雙向棧是把乙個棧當做兩個棧來使用,提高空間利用率,棧的棧底和棧頂分別做兩個棧的棧底,兩個中同時向中間生長。

雙向棧的資料結構:

#ifndef _doublestack_h_

#define _doublestack_h_

#include #include #define max 100

typedef structdoublestack;

void init(doublestack *s);

int push(doublestack *s, int elem, int stacklocation);

int delet(doublestack *s,int elem ,int stacklocation);

#endif

雙向棧的操作:

#define _crt_secure_no_warnings 1

#include "doublestack.h"

//初始化

void init(doublestack *s)

//入棧

int push(doublestack *s, int elem, int stacklocation)

if (stacklocation == 1)

if (stacklocation == 2)

return 0;

}//出棧並刪除元素

int delet(doublestack *s, int elem, int stacklocation)

if (stacklocation == 1)

if (stacklocation == 2)

return 0;

}

3:鏈棧是資料元素以單鏈表的形式儲存,故不存在棧滿的情況;

鏈棧的資料結構:

#ifndef _linkstack_h_

#define _linkstack_h_

#include #include typedef struct stacknode *linkstackptr,stacknode;

typedef struct linkstacklinkstack;

void init(linkstack *s);

int push(linkstack *s, int elem);

int pop(linkstack *s, int elem);

#endif

#define _crt_secure_no_warnings 1

#include "linkstack.h"

//初始化

void init(linkstack *s)

//入棧

int push(linkstack *s, int elem)

//出棧

int pop(linkstack *s, int elem)

linkstackptr p;

elem = s->top->data;

p = s->top;

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

free(p);

s->count--;

return elem;

}

資料結構 棧 棧

可以把棧想像成乙個桶 進棧 就是把和桶口一樣大的燒餅往桶裡面扔 出棧 就是把燒餅拿出來 特點 先進後出。先扔進去的燒餅最後才能拿出來,最後扔進去的燒餅,第乙個拿出來 剛開始top 1 top 1 然後把進棧的元素賦值給data top 入棧操作 void push stack s,int x els...

資料結構 棧

例子 棧是一種被限制在只能在表的一端進行插入和刪除運算的線性表。區域性變數是用棧來儲存的 可以進行插入和刪除的一端稱為 棧頂 top 另一端稱為 棧底 bottom 當表中沒有元素時 表長為0的棧 稱為 空棧。棧的修改是按 後進先出的原則進行,因此棧被稱為後進先出 last in first out...

資料結構 棧

1.棧stack 是限定僅在表尾進行刪除和插入操作的線性表。允許插入刪除的一端叫做棧頂top,另外一端叫做棧底bottom。棧又稱為後進先出 lifo 的線性表。即表尾是指棧頂。2.順序棧 定義 top指向可存入元素的位置。typedef struct stacktypestacktype 插入 進...