经典算法
#include<stdio.h>
#include<stdlib.h>
typedef int SElemType;
typedef int Status;
int end;
long total=0;
typedef struct stacklist
{
}SqStack;
void Stack_init(SqStack *s)
{
}
void Stack_Push(SqStack *s,SElemType e)
{
*(s->top)++=e;
}
SElemType Stack_Pop(SqStack *s)
{
if(s->top==s->base)
return 0;
return *(--(s->top));
}
Status Stack_Empty(SqStack *s)
{
if(s->top==s->base)
return 1;
return 0;
}
Status Stack_Full(SqStack *s)
{
if(s->top-s->base==end)
return 1;
return 0;
}
void Stack_printreverse(SqStack s)
{
printf("\t[%ld]: ",total);
while(po!=s.top)
printf("%d ",*po++);
}
void search(SqStack *inputPoint,SqStack *tempPoint,SqStack *outputPoint)
{
if(!Stack_Empty(inputPoint))
{
Stack_Push(tempPoint,Stack_Pop(inputPoint));
search(inputPoint,tempPoint,outputPoint);
Stack_Push(inputPoint,Stack_Pop(tempPoint));
}
if(!Stack_Empty(tempPoint))
{
Stack_Push(outputPoint,Stack_Pop(tempPoint));
search(inputPoint,tempPoint,outputPoint);
Stack_Push(tempPoint,Stack_Pop(outputPoint));
}
if(Stack_Full(outputPoint))
{
total++;
Stack_printreverse(*outputPoint);
}
}
void main()
{
SqStack input,temp,output;
int i;
//long total=0;
while(printf("\n\tPlease input the last Number of the Carriage: "),scanf("%d",&end)!= -1)
{
total = 0;
Stack_init(&input);
Stack_init(&temp);
Stack_init(&output);
for(i = end;i > 0;i--)
Stack_Push(&input,i);
search(&input,&temp,&output);
printf("\n\t\tthe total:%ld\n",total);
}
getchar();
return 0;
}
普通算法
#include<stdio.h>
#include<stdlib.h>
#define
MaxLen
100
int n;//定义输入序列总个数
struct
snode{
}s;//定义一个栈指针
void
Initstack()
{
}
void
push(int q)//元素n进栈
{
}
int
pop()//出栈
{
}
int
Emptys()//判断栈空
{
}
void
process(int
pos,int
path[],int
curp)//当前处理位置pos的元素
{
}
int main()
{
}