データ要素が文字型の順序スタックを確立する(C言語版)
2495 ワード
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#include<time.h>
#include<stdlib.h>
#define ElemType char
#define INIT_SIZE 100// ,
#define INCREMENT 10//
//
typedef struct SNode
{
ElemType *base;// ,base NULL
ElemType *top;//
int stacksize;//
}SqStack;
int InitStack(SqStack &S)
{//
S.base=(ElemType *)malloc(INIT_SIZE*sizeof(ElemType));
if(S.base == NULL)
{//
printf(" !
");return -1;
}
S.top=S.base;
S.stacksize=INIT_SIZE;//
return 1;
}
void Assignment(SqStack &S)// L , 3, 16
{
int i,p,flag,k=0;
char str[16]={NULL};
srand((unsigned)time(NULL));
p=rand()%12;
for(i=0;i<3+p;i++)//
{// 3, p
flag=rand()%2;
if(flag)S.base[i]='A'+rand()%26;
else S.base[i]='a'+rand()%26;
S.top++;// , 1
}
S.base[i]='\0';// , ,
}
int DestroyStack(SqStack &S)//
{
S.stacksize=0;
free(S.base);
S.top=S.base=NULL;
return 1;
}
int ClearStack(SqStack &S)//
{
S.top=S.base;
return 1;
}
int DisplayStack(SqStack S)//
{
if(S.base == NULL)
{
printf(" !
");return -1;
}
int len=S.top - S.base;
if(len <= 0)
{
printf(" !
");return 0;
}
int k;
printf(" :
");
for(k=0;k<len -1;k++)
{
printf("%c - ",S.base[k]);
}
printf("%c
",S.base[k]);
return 1;
}
int GetTop(SqStack S)//
{
ElemType e=*(S.top-1);
printf(" :%c
",e);
return 1;
}
int Push(SqStack &S)//
{
if(S.top - S.base >= S.stacksize)
{// ,
S.base=(ElemType *)realloc(S.base,(INIT_SIZE+INCREMENT)*sizeof(ElemType));
if(S.base == NULL)
{//
printf(" !
");return -1;
}
S.top=S.base + S.stacksize;
S.stacksize+=INCREMENT;
}
ElemType e;
printf(" :
");
scanf("%c",&e);
*S.top++=e;//
return 1;
}
int Pop(SqStack &S)//
{
if(S.base == S.top)
{
printf(" !
");return -1;
}
ElemType e=*(S.top-1);
*S.top--;//
printf(" %c !
",e);
return 1;
}
int main()
{
SqStack S;
InitStack(S);
Assignment(S);
DisplayStack(S);
GetTop(S);
// Push(S);
Pop(S);
DisplayStack(S);
GetTop(S);
return 1;
}