棧的基本操作

2021-07-24 10:35:27 字數 3847 閱讀 9127

一、棧是一種先進後出的資料結構,有兩種方式進行實現:陣列和鍊錶。用陣列實現,好處是不用指標操作,但是棧的大小是固定的,入棧是需要判斷棧滿,出棧時需要判斷棧空。棧頂指標指向最後壓入棧的資料(即每次入棧的時候我的棧頂指標先要+1,之後在進行壓棧操作)。
資料結構中應該體現資料(陣列儲存),棧頂(記錄陣列下標)。基本操作包括:初始化棧、判空、判滿、壓棧、出棧、清空棧、摧毀棧。用鍊錶實現的好處是棧的大小可以擴充套件,不用提前宣告。使用指標和鍊錶形式,更為複雜。棧頂指標指向壓入棧的最後資料。入棧的時候,動態申請乙個鏈棧節點。資料結構中當定義鍊錶中的節點,並且有指向該鍊錶的棧頂指標和棧底指標。棧底

一、棧是一種先進後出的資料結構,有兩種方式進行實現:陣列和鍊錶。用陣列實現,好處是不用指標操作,但是棧的大小是固定的,入棧是需要判斷棧滿,出棧時需要判斷棧空。棧頂指標指向最後壓入棧的資料(即每次入棧的時候我的棧頂指標先要+1,之後在進行壓棧操作)。 資料結構中應該體現資料(陣列儲存),棧頂(記錄陣列下標)。基本操作包括:初始化棧、判空、判滿、壓棧、出棧、清空棧、摧毀棧。用鍊錶實現的好處是棧的大小可以擴充套件,不用提前宣告。使用指標和鍊錶形式,更為複雜。棧頂指標指向壓入棧的最後資料。入棧的時候,動態申請乙個鏈棧節點。資料結構中當定義鍊錶中的節點,並且有指向該鍊錶的棧頂指標和棧底指標。棧底指標指向null(其實我覺得不用也行)。基本操作:初始化鏈棧、判空、壓棧、出棧。二、實現**指標指向null(其實我覺得不用也行)。基本操作:初始化鏈棧、判空、壓棧、

出棧。二、實現**

1、陣列形式實現的棧

#include #include #include /*

* init_stack

* in_stack

* out_stack

* full_stack

* empty_stack

* */

#define size 4

struct stack;

void init_stack(struct stack * s)

int if_full(struct stack* s)

else

return 0;

}int in_stack(struct stack* s, int data)

else

return -1;

}int if_empty(struct stack* s)

else

return 0;

}int out_stack(struct stack * s)

else

return 0;

}int main()

ret = out_stack(&s);

ret = out_stack(&s);

printf("ret: %d\n", ret);

ret = out_stack(&s);

if(ret == 0)

printf("ret: %d\n", ret);

#endif

return 0;

}

動態申請空間的陣列棧

/*-------------2016.11.6--------------*/

/*----------public by 於全------------*/

/*-----------棧的操作----------------

* ---------1、建立棧-----------------

*----------2、釋放棧-----------------

*----------3、清空棧----------------

*----------4、判空、判滿------------

*----------5、壓棧、出棧-----------

*----------6、取棧頂元素------------

*出現的問題:主函式 傳遞stack 為乙個指標

需要二級指標接收才能修改內容。所以在creat函式裡

定義乙個stack,返回。--------------*/

#include #include #define emptytos -1

#define minstacksize 2

typedef struct stackrecord

stackrecord,*stack;

//建立棧

stack creatstack (int);

//釋放棧

void destorystack(stack);

//判空

int isempty(stack);

//清空棧

void makeempty(stack);

//判滿

int isfull(stack);

//壓棧

void push(int , stack);

//列印棧

void showstack(stack);

//彈出第乙個數 取頭元素

int top(stack);

//出棧

int pop(stack);

int main()

stack creatstack(int maxelements)

#if 1

stack = (stack)malloc(sizeof(stackrecord));

if(stack ==null)

return ;

#endif

stack->array = (int *)malloc(sizeof(int)*maxelements);

if(stack->array== null)

return ;

stack->capacity = maxelements;

stack->topofstack = -1;

return stack;

}void destorystack(stack stack)

}int isempty(stack stack)

void makeempty(stack stack)

int isfull(stack stack)

else

return 0;

} void push(int x,stack stack)

else }

int top(stack stack)

else }

int pop(stack stack)

else }

void showstack(stack stack)

printf("\n");

}

2、鏈棧

#include #include struct sta_node;

struct link_sta;

int init_link_sta(struct link_sta* ls)

void in_link_sta(struct link_sta* ls, int value)

else

}struct sta_node* if_empty(struct link_sta* ls)

}struct sta_node* out_link_sta(struct link_sta* ls)

}int main()

printf("value: %d\n", value->data);

return 0;

}

棧 的基本操作。

include include typedef struct node node,pnode typedef struct stack stack,pstack void initialize pstack mystack 棧的初始化。int push stack pstack mystack,in...

棧的基本操作

描述 棧是一種重要的資料結構,它具有push k和pop操作。push k是將數字k加入到棧中,pop則是從棧中取乙個數出來。棧是後進先出的 把棧也看成橫向的乙個通道,則push k是將k放到棧的最右邊,而pop也是從棧的最右邊取出乙個數。假設棧當前從左至右含有1和2兩個數,則執行push 5和po...

棧的基本操作

下面先實現站的基本功能,最後通過乙個test來測試下方法是否實現 建個.c檔案 typedef struct seqstack 初始化 seqstack seqstackinit return null 判斷棧是否為空 int seqstackisempty seqstack s void seqs...