您的位置:首页 > 其它

顺序栈和链栈的实现

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

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

一、链式存储

#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: