#include<stdlib.h>
#include<iostream.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
typedef int Status;
typedef int SElemType;
typedef int QElemType;
typedef char SElemTypes;
typedef char QElemTypes;
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
typedef struct{
SElemTypes *base;
SElemTypes *top;
int stacksize;
}SqStacks;
//队列
#define MAXQSIZE 100
typedef struct{
QElemType *base;
int front;
int rear;
}SqQueue;
typedef struct{
QElemTypes *base;
int front;
int rear;
}SqQueues;
//栈
Status InitStack(SqStack &S){
S.base = new SElemType[MAXSIZE];
if(!S.base)
exit (OVERFLOW);
S.top = S.base;
S.stacksize = MAXSIZE;
return OK;
}
//入栈
Status Push(SqStack &S,SElemType e){
if(S.top-S.base==S.stacksize)
return ERROR;
*(S.top++) = e;
return OK;
}
//出栈
Status Pop(SqStack &S,SElemType &e){
if(S.base == S.top)
return ERROR;
e = *(--S.top);
return OK;
}
//=========
//栈
Status InitStack(SqStacks &S){
S.base = new SElemTypes[MAXSIZE];
if(!S.base)
exit (OVERFLOW);
S.top = S.base;
S.stacksize = MAXSIZE;
return OK;
}
//入栈
Status Push(SqStacks &S,SElemTypes e){
if(S.top-S.base==S.stacksize)
return ERROR;
*(S.top++) = e;
return OK;
}
//出栈
Status Pop(SqStacks &S,SElemTypes &e){
if(S.base == S.top)
return ERROR;
e = *(--S.top);
return OK;
}
//=======
//队列
Status InitQueue (SqQueue &Q){
Q.base =new QElemType[MAXQSIZE] ;
if(!Q.base) exit(OVERFLOW);
Q.front=Q.rear=0;
return OK;
}
//入队
Status EnQueue(SqQueue &Q,QElemType e){
if((Q.rear+1)%MAXQSIZE==Q.front) return ERROR;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXQSIZE;
return OK;
}
//出队
Status DeQueue(SqQueue &Q,QElemType &e){
if(Q.front==Q.rear) return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE;
return OK;
}
//========
//队列
Status InitQueue (SqQueues &Q){
Q.base =new QElemTypes[MAXQSIZE] ;
if(!Q.base) exit(OVERFLOW);
Q.front=Q.rear=0;
return OK;
}
//入队
Status EnQueue(SqQueues &Q,QElemTypes e){
if((Q.rear+1)%MAXQSIZE==Q.front) return ERROR;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXQSIZE;
return OK;
}
//出队
Status DeQueue(SqQueues &Q,QElemTypes &e){
if(Q.front==Q.rear) return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE;
return OK;
}
//========
//队列测试
void PushPop(SqQueue &Q){
int n=5,i;QElemType e;
cout<<"队列输入"<<n<<"个数:"<<endl;
for(i=0;i<n;i++){
cin>>e;
EnQueue(Q,e);
}
cout<<"队列输出:"<<endl;
for(i=0;i<n;i++){
DeQueue(Q,e);
cout<<e<<" ";
}
cout<<endl;
}
//回文
void HuiWen(){
int i=0,flag=0;
char c,n,m;
SqStacks S;
SqQueues Q;
InitStack(S);
InitQueue(Q);
cout<<"输入一串字符以 # 结束:"<<endl;
cin>>c;
while(c!='#'){
Push(S,c);
EnQueue(Q,c);
cin>>c;
}
while(S.base!=S.top){
Pop(S,n);DeQueue(Q,m);
if(n==m) flag=1;
}
if(flag) cout<<"该字符串是回文"<<endl;
else cout<<"该字符串不是回文"<<endl;
}
//N!
int N(int n){
if(n==0) return 1;
else return n*N(n-1);
}
//N!栈
void N(){
SqStack S;
int n,i,m,sum=1;
InitStack(S);
cout<<"输入N=";
cin>>n;
m=n;
for(i=0;i<m;i++){
Push(S,n);
n=n-1;
if(n==0){
n=1;
}
}
for(i=0;i<m;i++){
Pop(S,n);
cout<<n<<" ";
sum=sum*n;
}
cout<<endl<<"N!="<<sum<<endl;
}
void main(){
SqQueue Q;
InitQueue(Q);
PushPop(Q);
HuiWen();
cout<<"输入阶层n=";
int n;
cin>>n;
cout<<N(n)<<endl;
N();
}
#include<iostream.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100
typedef int Status;
typedef int SElemType;
typedef int QElemType;
typedef char SElemTypes;
typedef char QElemTypes;
typedef struct{
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
typedef struct{
SElemTypes *base;
SElemTypes *top;
int stacksize;
}SqStacks;
//队列
#define MAXQSIZE 100
typedef struct{
QElemType *base;
int front;
int rear;
}SqQueue;
typedef struct{
QElemTypes *base;
int front;
int rear;
}SqQueues;
//栈
Status InitStack(SqStack &S){
S.base = new SElemType[MAXSIZE];
if(!S.base)
exit (OVERFLOW);
S.top = S.base;
S.stacksize = MAXSIZE;
return OK;
}
//入栈
Status Push(SqStack &S,SElemType e){
if(S.top-S.base==S.stacksize)
return ERROR;
*(S.top++) = e;
return OK;
}
//出栈
Status Pop(SqStack &S,SElemType &e){
if(S.base == S.top)
return ERROR;
e = *(--S.top);
return OK;
}
//=========
//栈
Status InitStack(SqStacks &S){
S.base = new SElemTypes[MAXSIZE];
if(!S.base)
exit (OVERFLOW);
S.top = S.base;
S.stacksize = MAXSIZE;
return OK;
}
//入栈
Status Push(SqStacks &S,SElemTypes e){
if(S.top-S.base==S.stacksize)
return ERROR;
*(S.top++) = e;
return OK;
}
//出栈
Status Pop(SqStacks &S,SElemTypes &e){
if(S.base == S.top)
return ERROR;
e = *(--S.top);
return OK;
}
//=======
//队列
Status InitQueue (SqQueue &Q){
Q.base =new QElemType[MAXQSIZE] ;
if(!Q.base) exit(OVERFLOW);
Q.front=Q.rear=0;
return OK;
}
//入队
Status EnQueue(SqQueue &Q,QElemType e){
if((Q.rear+1)%MAXQSIZE==Q.front) return ERROR;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXQSIZE;
return OK;
}
//出队
Status DeQueue(SqQueue &Q,QElemType &e){
if(Q.front==Q.rear) return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE;
return OK;
}
//========
//队列
Status InitQueue (SqQueues &Q){
Q.base =new QElemTypes[MAXQSIZE] ;
if(!Q.base) exit(OVERFLOW);
Q.front=Q.rear=0;
return OK;
}
//入队
Status EnQueue(SqQueues &Q,QElemTypes e){
if((Q.rear+1)%MAXQSIZE==Q.front) return ERROR;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%MAXQSIZE;
return OK;
}
//出队
Status DeQueue(SqQueues &Q,QElemTypes &e){
if(Q.front==Q.rear) return ERROR;
e=Q.base[Q.front];
Q.front=(Q.front+1)%MAXQSIZE;
return OK;
}
//========
//队列测试
void PushPop(SqQueue &Q){
int n=5,i;QElemType e;
cout<<"队列输入"<<n<<"个数:"<<endl;
for(i=0;i<n;i++){
cin>>e;
EnQueue(Q,e);
}
cout<<"队列输出:"<<endl;
for(i=0;i<n;i++){
DeQueue(Q,e);
cout<<e<<" ";
}
cout<<endl;
}
//回文
void HuiWen(){
int i=0,flag=0;
char c,n,m;
SqStacks S;
SqQueues Q;
InitStack(S);
InitQueue(Q);
cout<<"输入一串字符以 # 结束:"<<endl;
cin>>c;
while(c!='#'){
Push(S,c);
EnQueue(Q,c);
cin>>c;
}
while(S.base!=S.top){
Pop(S,n);DeQueue(Q,m);
if(n==m) flag=1;
}
if(flag) cout<<"该字符串是回文"<<endl;
else cout<<"该字符串不是回文"<<endl;
}
//N!
int N(int n){
if(n==0) return 1;
else return n*N(n-1);
}
//N!栈
void N(){
SqStack S;
int n,i,m,sum=1;
InitStack(S);
cout<<"输入N=";
cin>>n;
m=n;
for(i=0;i<m;i++){
Push(S,n);
n=n-1;
if(n==0){
n=1;
}
}
for(i=0;i<m;i++){
Pop(S,n);
cout<<n<<" ";
sum=sum*n;
}
cout<<endl<<"N!="<<sum<<endl;
}
void main(){
SqQueue Q;
InitQueue(Q);
PushPop(Q);
HuiWen();
cout<<"输入阶层n=";
int n;
cin>>n;
cout<<N(n)<<endl;
N();
}