如题所述
楼上的真好笑啊,连别人是顺序栈链式栈都看不出来,就装逼教起别人来了啊。。。。 #include <stdio.h>
#include <stdlib.h>
#define OK 1
#define OVERFLOW -1
#define ERROR 0
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量typedef struct{
char *base;
char *top;
int stacksize;
} SqStack;int InitStack(SqStack &S) //栈的初始化
{
S.base = (char*)malloc(STACK_INIT_SIZE*sizeof(char));
if(!S.base)
exit(OVERFLOW);
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
}int Push(SqStack &S, char e) //栈满,追加存储空间
{
if(S.top-S.base >= S.stacksize)
{
S.base=(char*)realloc(S.base, (S.stacksize+STACKINCREMENT)*sizeof(char));
if(!S.base)
exit(OVERFLOW);
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*(S.top++) = e;
return OK;
}int Pop(SqStack &S, char &e) //出栈
{
if(S.top == S.base)
return ERROR;
e = *--S.top;
return OK;
}int GetTop(SqStack &S, char &e)
{
if(S.top == S.base)
return ERROR;
e = *(S.top - 1);
return OK;
}int StackEmpty(SqStack &S) //判断栈是否为空
{
return (S.top == S.base);
}void PrintStack(SqStack &S) //打印栈中元素
{
char *temp = S.top-1;
if(S.top == S.base)
return;
while(temp >= S.base)
{
printf("%c", *temp);
temp--;
}
printf("\n");
}
int main () //利用数组将栈内元素逆置
{
int i, n;
char c, A[255];
SqStack S;
InitStack(S); //初始化栈,
/**************************///原始数据入栈
for(i = 'a'; i != 'z'+1; i++)
{
Push(S, (char)i);
}
/**************************/
printf("Initial Stack:");
PrintStack(S);
/**************************///利用数组A将栈S内容逆置
for(i = 0; i != 26; i++)
{
Pop(S, A[i]);
}
for(i = 0; i != 26; i++)
{
Push(S, A[i]);
}
/**************************/
printf("Reversed Stack:");
PrintStack(S);
return 0;
}
#include <stdlib.h>
#define OK 1
#define OVERFLOW -1
#define ERROR 0
#define STACK_INIT_SIZE 100 //存储空间初始分配量
#define STACKINCREMENT 10 //存储空间分配增量typedef struct{
char *base;
char *top;
int stacksize;
} SqStack;int InitStack(SqStack &S) //栈的初始化
{
S.base = (char*)malloc(STACK_INIT_SIZE*sizeof(char));
if(!S.base)
exit(OVERFLOW);
S.top = S.base;
S.stacksize = STACK_INIT_SIZE;
return OK;
}int Push(SqStack &S, char e) //栈满,追加存储空间
{
if(S.top-S.base >= S.stacksize)
{
S.base=(char*)realloc(S.base, (S.stacksize+STACKINCREMENT)*sizeof(char));
if(!S.base)
exit(OVERFLOW);
S.top = S.base + S.stacksize;
S.stacksize += STACKINCREMENT;
}
*(S.top++) = e;
return OK;
}int Pop(SqStack &S, char &e) //出栈
{
if(S.top == S.base)
return ERROR;
e = *--S.top;
return OK;
}int GetTop(SqStack &S, char &e)
{
if(S.top == S.base)
return ERROR;
e = *(S.top - 1);
return OK;
}int StackEmpty(SqStack &S) //判断栈是否为空
{
return (S.top == S.base);
}void PrintStack(SqStack &S) //打印栈中元素
{
char *temp = S.top-1;
if(S.top == S.base)
return;
while(temp >= S.base)
{
printf("%c", *temp);
temp--;
}
printf("\n");
}
int main () //利用数组将栈内元素逆置
{
int i, n;
char c, A[255];
SqStack S;
InitStack(S); //初始化栈,
/**************************///原始数据入栈
for(i = 'a'; i != 'z'+1; i++)
{
Push(S, (char)i);
}
/**************************/
printf("Initial Stack:");
PrintStack(S);
/**************************///利用数组A将栈S内容逆置
for(i = 0; i != 26; i++)
{
Pop(S, A[i]);
}
for(i = 0; i != 26; i++)
{
Push(S, A[i]);
}
/**************************/
printf("Reversed Stack:");
PrintStack(S);
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答 2013-11-10
顺序栈还是链式栈?