顺序栈和链栈的实现

来源:互联网 发布:淘宝预售订单怎么取消 编辑:程序博客网 时间:2024/05/22 15:27

之前又一次现场笔试,当时直接懵逼了,发现自己之前看书,完全没注意这些,整个过程尴尬,后面决定好好把这些数据结构的基础实现完成一遍

栈的实现有三种,顺序存储链式存储还有共享栈

一、链式存储

#include <iostream>#include<string>#include <vector>using namespace std;//链栈的实现typedef struct ListNode{int val;ListNode* next;}ListNode;typedef struct ListStack{ ListNode* top; int count;}ListStack;void push1(ListStack* s,int num){  ListNode* p=new ListNode;  p->val=num;  p->next=s->top;  s->top=p;  s->count++;}int pop1(ListStack*s){  if(s->count==0)  return -1;  int num;  num=s->top->val;  ListNode* p=s->top;  s->top=s->top->next;  delete p;  return num;}int main(){ ListStack* lstack=new ListStack; lstack->count=0; lstack->top=NULL; push1(lstack,1); push1(lstack,2); int num1=pop1(lstack); int num2=pop1(lstack); cout<<num1<<" "<<num2<<endl; return 0;}

二、顺序存储

#include <iostream>#include<string>#include <vector>using namespace std;#define maxsize 100//顺序栈的实现typedef struct ArrStack{ int data[maxsize]; int top;}ArrStack;void push(ArrStack*s,int num){ if(s->top==maxsize-1) return; s->top++; s->data[s->top]=num;}int pop(ArrStack*s){ if(s->top==-1) return -1; int num=s->data[s->top]; s->top--; return num;}int main(){ ArrStack* s=new ArrStack; s->top=0; push(s,1); push(s,2); cout<<pop(s)<<endl; cout<<pop(s)<<endl; return 0;}
三、两栈共享内存

#include <iostream>#include<string>#include <vector>using namespace std;#define maxsize 100//顺序栈的实现typedef struct ArrStack{ int data[maxsize]; int top1; int top2;}ArrStack;void push(ArrStack*s,int num,int stacknum){ if(s->top1+1==s->top2) return; if(stacknum==1)   s->data[++s->top1]=num; else if(stacknum==2)   s->data[--s->top2]=num;}int pop(ArrStack*s,int stacknum){int num;if(stacknum==1){ if(s->top1==-1) return -1;   num=s->data[s->top1--];}  if(stacknum==2){ if(s->top2==maxsize) return -1;   num=s->data[s->top2++];} return num;}int main(){ ArrStack* s=new ArrStack; s->top1=0; s->top2=maxsize-1; push(s,1,1); push(s,2,1); push(s,3,2); push(s,4,2); cout<<pop(s,1)<<endl; cout<<pop(s,1)<<endl; cout<<pop(s,2)<<endl; cout<<pop(s,2)<<endl; return 0;}



0 0