前言:栈和队列是非常有用的结构,一个后进先出,一个先进先出。它们也有很多的应用,such as数制的转换、表达式求值、舞伴问题、迷宫求解、括号的匹配。
这里给出数制的转换(十进制转换为其它进制,当然,其它进制转换也只可先转换为10进制,在进行相应转换,都可以用到栈),舞伴问题(简单的队列的使用),迷宫求解的话用到了回溯法和栈,其它博主写得要好很多,可以去看看。
1.数制的转换
/*功能:数制的转换*/
#include<iostream>
#include<stdlib.h>
using namespace std;
#define MAXSIZE 100
typedef struct{
int *top;
int *base;
int stacksize;
}SqStack;
void InitSqStack(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 == S.stacksize)
exit(0);
*S.top = e;
*S.top++;
}
int Pop(SqStack &S)
{
if(S.top == S.base)
exit(0);
*S.top--;
return *S.top;
}
void conversion(SqStack &S,int N,int P)
{
static Q = N;
while(N)
{
Push(S,N%P);
N = N/P;
}
cout<<Q<<"的"<<P<<"进制数为:"<<endl;
while(S.top!=S.base)
{
cout<<Pop(S)<<" ";
}
}
int main()
{
SqStack S;
InitSqStack(S);
int N,P;
cout<<"请输入要转换的整数:"<<endl;
cin>>N;
cout<<"请输入要转的进制数:"<<endl;
cin>>P;
conversion(S,N,P);
return 0;
}
2.舞伴问题
#include<iostream>
#include<stdlib.h>
using namespace std;
#define MAXQSIZE 100
typedef struct{
char name[20];
char sex;
}P;
typedef struct{
P *base;
int font;
int rear;
}SqQueue;
SqQueue M,F;
void InitQueue(SqQueue &Q)
{
Q.base = new P[MAXQSIZE];
if(!Q.base) exit(0);
Q.font = Q.rear=0;
}
int QueuLength(SqQueue Q)
{
return((Q.rear-Q.font+MAXQSIZE)%MAXQSIZE);
}
void EnQueue(SqQueue &Q,P e)
{
if((Q.rear+1)%MAXQSIZE==Q.font)
exit(0);
Q.base[Q.rear]=e;
Q.rear = (Q.rear+1)%MAXQSIZE;
}
void DeQueue(SqQueue &Q)
{
if(Q.font==Q.rear) exit(0);
Q.font=(Q.font+1)%MAXQSIZE;
}
void DancePartner(P dancer[],int num,SqQueue &M,SqQueue &F)
{
for(int i=0;i<num;i++)
{
cout<<"name :"<<endl;
cin>>dancer[i].name;
cout<<"sex:"<<endl;
cin>>dancer[i].sex;
if(dancer[i].sex=='F') EnQueue(F,dancer[i]);
else EnQueue(M,dancer[i]);
}
cout<<"The dancing partners are:\n";
while((M.font!=M.rear)&&(F.font!=F.rear))
{
cout<<F.base[F.font].name<<" & ";
DeQueue(F);
cout<<M.base[M.font].name<<endl;
DeQueue(M);
}
cout<<endl;
if(F.font!=F.rear)
{
cout<<"The first woman to get a partner is: "<<F.base[F.font].name<<endl;
}
else if(M.font!=M.rear)
{
cout<<"The first man to get a partner is: "<<M.base[M.font].name<<endl;
}
}
int main()
{
int num;
cout<<"要录入的人数:"<<endl;
cin>>num;
P dancer[100];
SqQueue M,F;
InitQueue(M);
InitQueue(F);
DancePartner(dancer,num,M,F);
return 0;
}