#include<iostream>
//顺序栈静态存储结构定义
/*
#define InitSize 100
typedef int SElemType;
typedef struct {
SElemType data[InitSize];
int top;
}SeqStack;
*/
//顺序栈动态存储以及相关操作
/*
#define InitSize 20
typedef int SElemType;
typedef struct {
SElemType*data;
int top, maxsize;
}SeqStack;
void StackInit(SeqStack&S)
{
S.data = (SElemType*)malloc(sizeof(SElemType)*InitSize);
S.maxsize = InitSize;
S.top = -1;
}
int Push(SeqStack&S, SElemType val)
{
if (S.top == (S.maxsize - 1))return 0;
S.data[++S.top] = val;
return 1;
}
int Pop(SeqStack&S,SElemType&x)
{
if (S.top == -1)return 0;
x = S.data[S.top--];
return 1;
}
int GetTop(SeqStack&S, SElemType x)
{
if (S.top == -1)return 0;
x = S.data[S.top--];
return 1;
}
int StackEmpty(SeqStack&S)
{
return S.top == -1;
}
int StackFull(SeqStack&S)
{
return S.top == S.maxsize - 1;
}
int StackSize(SeqStack&S)
{
return S.top+1;
}
*/
//双栈共享同一栈空间
/*
#include<iostream>
#define InitSize 20
typedef int SElemType;
typedef struct {
SElemType*data;
int top[2], maxsize;
}DblStack;
void StackInit(DblStack&S)
{
S.data = new SElemType(InitSize);
S.top[0] = -1;
S.top[1] = InitSize;
S.maxsize = InitSize;
}
int Push(DblStack&S, SElemType val, int n)
{
if (S.top[0] + 1 == S.top[1])return 0;
if (n == 0) S.data[++S.top[0]] = val;
else S.data[--S.top[1]] = val;
return 1;
}
int Pop(DblStack&S, SElemType x,int n)
{
if (S.top[n] == -1 || S.top[n] == S.maxsize)return 0;
if (n == 0)x = S.data[S.top[n]--];
else x = S.data[S.top[1]++];
return 1;
}
*/
//多个栈存储时
/*
#include<iostream>
using namespace std;
#define InitSize 40
#define InitNum 4
typedef int SElemType;
typedef struct {
SElemType*data;
int top[InitNum], bot[InitNum+1], maxsize,n;
}PolyStack;
void StackInit(PolyStack&S)
{
S.data = new SElemType(InitSize);
for (int i = 1;i <=InitNum;i++)
{
S.bot[i-1] = (i - 1)*InitSize / InitNum;
S.top[i-1] = S.bot[i-1] - 1;
}
S.n = InitNum;
S.bot[S.n] = InitSize;
S.maxsize = InitSize;
}
int Push(PolyStack&S, SElemType val, int n)
{
if (S.top[n - 1] + 1 == S.bot[n])
{
int k = 0;
if (S.n != n) {
for (int i = n + 1;i <= S.n;i++)
if (S.top[i - 1] + 1 < S.bot[i])
{
k = i;
break;
}
}
if (k == 0)
{
for (int i = n - 1;i >= 1;i--)
{
if (S.top[i - 1] + 1 < S.bot[i])
{
k = i;
break;
}
}
}
if (k == 0)return 0;
else {
int temp;
if (k > n)
{
for (int i = S.top[k - 1] + 1;i > S.bot[n];i--)
S.data[i] = S.data[i - 1];
for (int i = n + 1;i <= k;i++)
{
S.top[i - 1]++;
S.bot[i - 1]++;
}
}
else
{
for (int i = S.bot[k] - 1;i < S.top[n - 1];i++)
S.data[i] = S.data[i + 1];
for (int i = k + 1;i <= n;i++)
{
S.top[i - 1]--;
S.bot[i - 1]--;
}
}
S.data[++S.top[n - 1]] = val;
}
}
else S.data[++S.top[n - 1]] = val;
return 1;
}
int Pop(PolyStack&S, SElemType&x,int n)
{
if (n<1 || n>S.n)return 0;
if (S.top[n - 1] == S.bot[n - 1] - 1)return 0;
else x = S.data[S.top[n - 1]--];
return 1;
}
int main()
{
PolyStack S;
StackInit(S);
for (int i = 1;i < 20;i++)
Push(S, i , 1);
for(int i=0;i<19;i++)
cout << S.data[i] << endl;
system("pause");
}
*/
//链式栈
/*
#include<iostream>
using namespace std;
typedef int SElemType;
typedef struct node {
SElemType data;
struct node*link;
}LinkNode,*LinkStack;
void StackInit(LinkStack S)
{
S = new LinkNode;
S->link = NULL;
}
int Push(LinkStack&S, SElemType val)
{
LinkStack NewNode = new LinkNode;
NewNode->data = val;
NewNode->link = S;
S = NewNode;
return 1;
}
int Pop(LinkStack&S, SElemType&x)
{
if (S == NULL)return 0;
x = S->data;
LinkStack B = S;
S = S->link;
delete B;
return 1;
}
int main()
{
LinkStack S=NULL;
StackInit(S);
for (int i = 0;i < 5;i++)
Push(S, i);
while (S != NULL)
{
SElemType x;
Pop(S,x);
cout << x << endl;
}
system("pause");
}
*/
c++实现数据结构中各种类型的栈
最新推荐文章于 2022-02-24 23:12:09 发布