顺序栈和链栈的实现
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;
}
栈的实现有三种,顺序存储链式存储还有共享栈
一、链式存储
#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;
}
相关文章推荐
- 链栈,顺序栈,单链队列,循环队列,非循环队列的简单实现
- c/c++实现顺序栈和链栈
- C#实现顺序栈和链栈
- 数据结构-栈:顺序栈与链栈的C++模板类实现
- 数据结构栈的实现 顺序栈,链栈
- 链栈和顺序栈的实现
- 栈的实现-顺序栈和链栈
- 顺序栈、链栈已及队列的实现
- 顺序栈和链栈的基本操作实现
- 数据结构-------顺序栈与链栈的实现
- C# 代码实现 顺序栈和链栈
- 【数据结构】堆栈(顺序栈、链栈)的JAVA代码实现
- 使用ASP.NET AJAX Control Toolkit中的ReorderList控件实现用鼠标拖动改变条目顺序
- 单链表的顺序实现例程[静态分配存储空间]
- 描述与实现——系统构建的顺序
- 栈和链栈的实现
- C语言实现数据结构中的顺序表
- 简单顺序表的实现
- Effective C# 原则26:用IComparable和IComparer实现对象的顺序关系(译)
- 顺序栈的C语言实现