链栈的实现

来源:互联网 发布:淘宝自然搜索怎么做 编辑:程序博客网 时间:2024/05/14 08:00

一、栈的定义

栈可理解为一种受限制的单链表,单链表可在标的两端进行插入删除,栈只能在一端进行插入删除,插入操作成为入栈(push),删除操作成为出栈(pop)。允许插入删除的一端称为栈顶(Top),另一端称为栈底(Button)。

特点:
(1)只能在栈顶进行插入删除;

(2)先入栈的元素在栈底,后入栈的元素在栈顶;

(2)具有“先进后出”(Last In First Out)的原则。

图示:

二、链栈

栈的实现可以通过顺序存储和链式存储实现。栈的链式存储是通过指针来实现的。

栈的结构定义如下:

typedef struct Node{int val;//数据域Node *pnext;//指针域}Node;typedef struct Stack{Node *pBase;//栈底指针Node *pTop; //栈顶指针}stackList;
、代码实现

LStack.h

#pragma oncetypedef struct Node{int val;Node *pnext;}Node;typedef struct Stack{Node *pBase;Node *pTop;}*stackList;Node* Buynode();               //创建一个节点bool Initisite(stackList &stack);     //初始化bool push(stackList &stack, int val);    //入栈bool pop(stackList &stack);     //出栈bool IsEmpty(stackList &stack);  //判断栈空int GetTop(stackList &stack);   //取栈顶元素void display(stackList &stack);   //打印栈元素

LStack.cpp

#include<iostream>#include"LStack.h"using namespace std;Node* Buynode()//创建一个节点{Node *s = (Node*)malloc(sizeof(Node));if (NULL == s) return NULL;s->pnext = NULL;return s;}bool Initisite(stackList &stack)     //初始化{stack = (stackList)malloc(sizeof(stackList));if (NULL == stack) return false;stack->pBase = stack->pTop = Buynode();return true;}bool push(stackList &stack, int val)   //入栈{Node *p = Buynode();p->val = val;p->pnext = stack->pTop;stack->pTop = p;return true;}bool pop(stackList &stack)    //出栈{Node *p = NULL;if (!IsEmpty(stack)){p = stack->pTop;stack->pTop = p->pnext;free(p);p = NULL;return true;}return false;}bool IsEmpty(stackList &stack)  //判断栈空{return stack->pBase == stack->pTop;}int GetTop(stackList &stack)   //取栈顶元素{return stack->pTop->val;}void display(stackList &stack)  //打印栈元素{Node *p = stack->pTop;if (!IsEmpty(stack)){while (stack->pBase != p){cout << p->val << " ";p = p->pnext;}}cout << endl;}


main.cpp

#include<iostream>#include"LStack.h"using namespace std;int main(){stackList stack ;Initisite(stack);push(stack, 12);push(stack, 23);push(stack, 34);push(stack, 45);push(stack, 56);puts("Get the top data:");printf("%d \n", GetTop(stack));puts("display stack:");display(stack);pop(stack);puts("display after pop a top data:");display(stack);return 0;}

运行结果:


0 0
原创粉丝点击