棧的鏈式結構表示與實現——自己寫資料結構
阿新 • • 發佈:2019-01-17
今天給大家介紹棧的鏈式結構,用dev-c++4.9.9.2除錯通過,少廢話直接上程式碼:
資料結構體存放檔案stacklist.h檔案如下
#ifndef _STACKLIST_H_ #define _STACKLIST_H_ typedef struct _Node { int data; struct _Node *pre; struct _Node *next; }Node,*pNode; typedef struct _Stack_Header { struct _Node *botton; struct _Node *top; int size; }Stack_Header,*pStack_Header; pStack_Header init_stack_list(void); pNode push_node(pStack_Header plist,int data); pNode pop_node(pStack_Header plist); int print_stack_list(pStack_Header plist); #endif
函式存放檔案stacklist.c
/******************************* 時間:2014.12.12 作者:XIAO_PING_PING 內容:棧的鏈式資料結構 功能:學習些資料結構 ********************************/ #include <string.h> #include <stdlib.h> #include <conio.h> #include "stacklist.h" /*初始化一個堆疊連結串列*/ pStack_Header init_stack_list(void) { pStack_Header plist; pNode p; plist = (Stack_Header *)malloc(sizeof(Stack_Header)); plist->botton = NULL; plist->top = NULL; plist->size = 0; return plist; } /*往堆疊裡面新增節點,資料data*/ pNode push_node(pStack_Header plist,int data) { pNode p; p = (Node *)malloc(sizeof(Node)); p->data = data; p->next = NULL; p->pre = plist->top; if((plist->top == NULL) && (plist->botton == NULL)) { plist->top = p; plist->botton = p; plist->size = 1; printf("入棧第1個節點\n"); return p; } plist->top->next = p; plist->top = p; plist->size += 1; printf("入棧第%d個節點\n",plist->size); return plist->top; } /*出棧刪除節點*/ pNode pop_node(pStack_Header plist) { pNode p; if(0 == plist->size) { printf("棧區沒有節點,無法完成出棧\n"); return plist->top; } p = plist->top; plist->top = plist->top->pre; if(NULL != plist->top) { plist->top->next = NULL; } else { plist->botton = NULL; } free(p); plist->size -= 1; printf("出棧第%d個節點\n",plist->size + 1); return plist->top; } /*列印入棧資料*/ int print_stack_list(pStack_Header plist) { pNode p; if((plist->top == plist->botton) && (0 == plist->size)) { printf("棧區沒有節點\n"); return -1; } p = plist->botton; printf("從棧底開始列印資料\n"); while(plist->top != p) { printf("%d ",p->data) ; p = p->next; } printf("%d ",p->data) ; printf("\n列印完畢\n"); return 0; }
測試檔案test.c
#include <string.h> #include <stdlib.h> #include <conio.h> #include "stacklist.h" int main() { pStack_Header plist; plist = init_stack_list(); push_node(plist,13); push_node(plist,1); push_node(plist,232); push_node(plist,143); print_stack_list(plist); pop_node(plist); pop_node(plist); pop_node(plist); //pop_node(plist); //pop_node(plist); printf("\n"); print_stack_list(plist); getch(); }
執行結果如下圖: