数据结构(严蔚敏)之四——链栈之c语言实现
生活随笔
收集整理的這篇文章主要介紹了
数据结构(严蔚敏)之四——链栈之c语言实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
編寫一個程序實現鏈棧的各種基本運算,并在此基礎上設計一個主程序,完成如下功能:
(1)初始化鏈棧
(2)鏈棧置空
(3)入棧
(4)出棧
(5)取棧頂元素
(6)遍歷鏈棧
鏈棧的功能實現:
#include <stdio.h> #include <malloc.h>#define ERROR 0 #define OK 1 #define TRUE 1 #define FALSE 0 typedef int ElemType; typedef int Status;typedef struct node {ElemType data;struct node *next; }StackNode;typedef struct {StackNode *top; }LinkStack;//初始化 void InitStack(LinkStack *s) {s->top = NULL;puts("鏈棧初始化完成!"); }//將鏈棧置空 Status SetEmpty(LinkStack *s) {StackNode *p = s->top;while(p){s->top = p->next;free(p);p = s->top;}puts("鏈棧已置空!");return OK; }//壓棧 Status Push(LinkStack *s, ElemType e) {StackNode *p;p = (StackNode *)malloc(sizeof(StackNode));p->data = e;p->next = s->top;//把要壓入的元素內存單元的next指針指向棧頂s->top = p;//棧頂指向新壓入的元素內存單元return OK; }//彈棧 Status Pop(LinkStack *s, ElemType *e) {StackNode *p = s->top;if(s->top == NULL){puts("棧空, 不能進行彈棧操作!");return ERROR;}s->top = p->next;//讓棧頂指針指向前一個元素,*e = p->data;free(p);//釋放棧頂元素內存空間return OK; }Status GetTop(LinkStack *s, ElemType *e) {if(s->top == NULL){puts("棧空, 無棧頂元素!");return ERROR;}*e = s->top->data;return OK; }//打印棧 Status PrintStack(LinkStack *s) {StackNode *p;p = s->top;while(p){printf("%d ", p->data);p = p->next;}puts("");return OK; }
測試代碼段
int main() {LinkStack s;InitStack(&s);int n, e;printf("請輸入鏈棧長度:\n");scanf("%d", &n);puts("請輸入要錄入的數據:");while(n--){int x;scanf("%d", &x);Push(&s, x);}PrintStack(&s);GetTop(&s, &e);printf("棧頂元素為:%d\n",e);puts("8入棧后:");Push(&s,8);PrintStack(&s);Pop(&s, &e);printf("彈棧元素是:%d\n", e);puts("彈棧后:");PrintStack(&s);SetEmpty(&s);return 0; }運行結果:
總結
以上是生活随笔為你收集整理的数据结构(严蔚敏)之四——链栈之c语言实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 美团技术:交易平台建设实践(视频+胶片)
- 下一篇: “宇宙第一大行”之 MySQL 数据库架