链栈的实现

来源:互联网 发布:算法工程师怎么考 编辑:程序博客网 时间:2024/05/29 04:53

链栈的数据结构如下:

typedef struct LinkNode{ElemType data;            //节点数据 LinkNode* next;           //指向下一节点指针 }LinkStack;

实现以下函数:

void InitStack(LinkStack* &s);    //初始化栈void DestroyStack(LinkStack* &s);  //销毁栈int StackLength(LinkStack* s);  //求栈的长度int StackEmpty(LinkStack* s);  //栈是否为空int Push(LinkStack* &s,ElemType e);  //进栈int Pop(LinkStack* &s,ElemType &e);   //出栈int GetTop(LinkStack* s,ElemType &e); //取栈顶元素void DispStack(LinkStack* s); //输出栈 

具体实现代码:

#include <stdio.h>#include <stdlib.h>#include <iostream>#define ElemType char#define GET_ARRAY_LENGTH(array) (sizeof(array)/sizeof(array[0]))using namespace std;typedef struct LinkNode{ElemType data;            //节点数据 LinkNode* next;           //指向下一节点指针 }LinkStack;void InitStack(LinkStack* &s);    //初始化栈void DestroyStack(LinkStack* &s);  //销毁栈int StackLength(LinkStack* s);  //求栈的长度int StackEmpty(LinkStack* s);  //栈是否为空int Push(LinkStack* &s,ElemType e);  //进栈int Pop(LinkStack* &s,ElemType &e);   //出栈int GetTop(LinkStack* s,ElemType &e); //取栈顶元素void DispStack(LinkStack* s); //输出栈 void InitStack(LinkStack* &s){s=(LinkStack* )malloc(sizeof(LinkStack));s->next=NULL;} void DestroyStack(LinkStack* &s){LinkStack* p=s;LinkStack* q=s->next;while(q!=NULL){free(p);p=q;q=q->next;}free(p);}int StackLength(LinkStack *s){int count=0;LinkStack* p=s;while(p->next!=NULL){p=p->next;count++;}return count;}int StackEmpty(LinkStack *s){return (s->next==NULL);}void DispStack(LinkStack* s){LinkStack* p=s->next;while(p!=NULL){cout<<p->data<<" ";p=p->next;}cout<<endl;}int Push(LinkStack* &s,ElemType e){LinkStack* p=s;while(p->next!=NULL){p=p->next;} LinkStack* q=(LinkStack *)malloc(sizeof(LinkStack));q->data=e;q->next=NULL;p->next=q; return 1; }int Pop(LinkStack* &s,ElemType &e){LinkStack* q=s;LinkStack* p=s->next;if(p==NULL)return -1;else{while(p->next!=NULL){p=p->next;q=q->next;} e=p->data;free(p);q->next=NULL;return 1;}}int GetTop(LinkStack* s,ElemType &e){LinkStack* p=s;if(p->next==NULL)return -1;else{while(p->next!=NULL)p=p->next; e=p->data;return 1;}}int main(){int i=0;ElemType e; LinkStack* s=NULL;ElemType a[]={'a','g','f','h','j','y','r','k'};InitStack(s);for(int i=0;i<GET_ARRAY_LENGTH(a);i++){Push(s,a[i]);DispStack(s);}GetTop(s,e);cout<<e<<" "<<StackLength(s)<<" "<<endl;for(int i=0;i<GET_ARRAY_LENGTH(a);i++){Pop(s,a[i]);DispStack(s);}return 0;}
实验结果:


0 0
原创粉丝点击