//鏈表
typedef struct NODE
{
int data;//數據域
struct NODE * next;//指針域
}* Node;
//棧
typedef struct STACK
{
Node top;//棧頂
Node bottom;//棧底
} * Stack;
//初始化
Stack init_stack();
//入棧
void push_stack(Stack stack,int data);
//出棧
void pop_stack(Stack stack,int * pData);
//遍歷
void traverse_stack(Stack stack);
//清空
void clear_stack(Stack stack);
int main(int argc, const char * argv[]) {
Stack stack = init_stack();
push_stack(stack, 1);
push_stack(stack, 2);
push_stack(stack, 3);
push_stack(stack, 4);
// traverse_stack(stack);
// pop_stack(stack, NULL);
// traverse_stack(stack);
clear_stack(stack);
return 0;
}
//初始化
Stack init_stack()
{
Stack stack = (Stack)malloc(sizeof(Stack));
stack->top = (Node)malloc(sizeof(Node));
if (stack->top == NULL) {
printf("分配內存失敗");
exit(-1);
}else
{
stack->bottom = stack->top;
stack->top->next = NULL;
}
return stack;
}
//入棧
void push_stack(Stack stack,int data)
{
Node new = (Node)malloc(sizeof(Node));
new->data = data;
//每次新建節點指向棧頂
new->next = stack->top;
//棧頂指向新節點
stack->top = new;
}
//出棧
void pop_stack(Stack stack,int * pData)
{
if (stack->top == stack->bottom) {
printf("已經是空棧,不能出棧");
exit(-1);
}
pData = &stack->top->data;
Node p = stack->top;
stack->top = p->next;
free(p);
p = NULL;
}
//遍歷
void traverse_stack(Stack stack)
{
Node p = stack->top;
while (p != stack->bottom) {
printf("%d ",p->data);
p = p->next;
}
printf("\n");
}
//清空
void clear_stack(Stack stack)
{
if (stack->top == stack->bottom) {
return;
}else
{
Node p = stack->top;
Node q;
while (p != stack->bottom) {
q = p->next;
free(p);
p = q;
}
stack->top = stack->bottom;
}
}
棧的鏈式存儲結構
最后編輯于 :
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
推薦閱讀更多精彩內容
- 太長了,還是轉載吧...今天在看博客的時候,無意中發現了@Trinea在GitHub上的一個項目Android開源...
- Android中國開發精英目前包括: Android開源項目第一篇——個性化控件(View)篇 包括ListV...
- 得到《超級個體》欄目今天談及的是“短板已死、優勢永生”的話題,投資長板與優勢對人生的發展而言至關重要。與此同時,也...