#include <iostream>
using namespace std;
//顺序栈
#define MAXSIZE 100
typedef struct {
int* base;//栈底指针
int* top;//栈顶指针
int stacksize;//栈的最大容量
} SqStack;
void InitStack(SqStack& S) {
S.base = new int[MAXSIZE]; //为顺序栈分配一个最大储存值
if (!S.base)
exit(0);
S.top = S.base;
S.stacksize = MAXSIZE;
}
void Push(SqStack& S,int e) { //栈顶指针移动
if (S.top - S.base == MAXSIZE) {
printf("栈满\n");
exit(0);
}
*S.top = e;
//cout<<*S.top;
*S.top++;//*S.top++=e;
}
void Pop(SqStack& S, int& e) {
*S.top--;
e = *S.top;//e=*--S.top
}
int GetTop(SqStack &S)
{
if(S.top!=S.base) //栈非空
return *(S.top-1);
}
void ShowStack(SqStack &S)
{
while(S.top!=S.base)
{
*S.top--;
cout<<*S.top;
}
}
int main()
{
SqStack S;
InitStack(S);
Push(S,1);
Push(S,2);
Push(S,3);
ShowStack(S);
return 0;
}
//链栈
typedef struct StackNode
{
int data;
struct StackNode *next;
} SNode,*LinkStack;
void InitStack(LinkStack &S)
{
S=NULL;
}
void Push(LinkStack &S,int e)
{
LinkStack p=new SNode;
p->data=e;
p->next=S;
S=p;
}
void Pop(LinkStack &S,int &e)
{
e=S->data;
LinkStack p=S;
S=S->next;
delete p;
}
void ShowStack(LinkStack &S)
{
while(S!=NULL)
{
cout<<S->data;
S=S->next;
}
}
int main()
{
LinkStack S;
InitStack(S);
Push(S,1);
Push(S,2);
Push(S,3);
ShowStack(S);
return 0;
}
//顺序队列
#define MAXSIZE 100
typedef struct
{
int *base;//储存空间的基地址
int front;//注意没有* ,头指针
int rear;//尾指针和头指针其实是整数,不是指针
} SqQueue;
void InitQueue(SqQueue &Q)
{
Q.base=new int[MAXSIZE];//为队列分配一个最大空间
Q.front=Q.rear=0;//头尾指针均为0,队列为空
}
//求队列长度
int QueueLength(SqQueue Q)
{
return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;
}
void EnQueue(SqQueue &Q,int e)
{
if((Q.rear+1)%MAXSIZE==Q.front)
{
printf("队满\n");
exit(0);
}
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXSIZE;
}
void DeQueue(SqQueue &Q,int &e)
{
if((Q.rear+1)%MAXSIZE==Q.front)
{
printf("队满\n");
exit(0);
}
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXSIZE;
}
int GetTop(SqQueue &Q)
{
if(Q.front!=Q.rear)
return Q.base[Q.front];
}
void ShowQueue(SqQueue &Q)
{
while(Q.front!=Q.rear)
{
cout<<Q.base[Q.front];
Q.front=(Q.front+1)%MAXSIZE;
}
}
int main()
{
SqQueue Q;
InitQueue(Q);
EnQueue(Q,1);
EnQueue(Q,2);
EnQueue(Q,3);
ShowQueue(Q);
return 0;
}
//链队列
typedef struct QNode
{
int data;
struct QNode *next;
} QNode,*QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
} LinkQueue;
void InitQueue(LinkQueue &Q)
{
Q.front=Q.rear=new QNode;//生成新节点作为头结点,队尾和队头均指向它
Q.front->next=NULL;//头结点的指针域为空
}
void EnQueue(LinkQueue &Q,int e)
{
QueuePtr p=new QNode;//注意此时是QueuePtr
p->data=e;
p->next=NULL;
Q.rear->next=p;//插入队尾
Q.rear=p;
}
void DeQueue(LinkQueue &Q,int &e)
{
if(Q.front==Q.rear)
{
printf("队空\n");
exit(0);
}
QueuePtr p=Q.front->next;//指向队头元素
e=p->data;
Q.front->next=p->next;
delete p;
}
int GetTop(LinkQueue &Q)
{
if(Q.front!=Q.rear)
return Q.front->next->data;
}
void ShowQueue(LinkQueue &Q)
{
while(Q.front->next!=NULL)
{
cout<<Q.front->next->data;
Q.front->next=Q.front->next->next;
}
}
int main()
{
LinkQueue Q;
InitQueue(Q);
EnQueue(Q,1);
EnQueue(Q,2);
EnQueue(Q,3);
ShowQueue(Q);
return 0;
}
顺序栈、链栈、顺序队列、链队列
最新推荐文章于 2022-08-16 14:44:15 发布