链栈的实现
来源:互联网 发布:算法工程师怎么考 编辑:程序博客网 时间: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
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- 链栈的实现
- iOS-从网络下载图片,保存,并用imageview从保存中显示
- JAVA内存详解
- 关于系统权限设计的思考
- Tornado依据header收集用户信息
- 转——java调用.so文件的例子
- 链栈的实现
- noip2014 提高组题解 bird
- iOS-UITableView分页加载
- flash的坐标系详解
- web压力测试-pylot
- HDU2527 Safe Or Unsafe 哈夫曼编码
- 调用快排
- assets目录下的文件拷贝到sd卡目录下
- js弹出框、对话框、提示框、弹窗总结