データ要素が文字型の順序スタックを確立する(C言語版)


#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; }