一、棧是一種先進後出的資料結構,有兩種方式進行實現:陣列和鍊錶。用陣列實現,好處是不用指標操作,但是棧的大小是固定的,入棧是需要判斷棧滿,出棧時需要判斷棧空。棧頂指標指向最後壓入棧的資料(即每次入棧的時候我的棧頂指標先要+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...