数据结构C语言 栈

发布网友 发布时间:2022-04-20 09:58

我来回答

2个回答

热心网友 时间:2023-06-29 11:02

#include<malloc.h> /* malloc()等 */
#include<stdio.h> /* EOF(=^Z或F6),NULL */
#include<stdlib.h> /* atoi() */
#include<process.h> /* exit() */
struct StackRecord;
typedef struct StackRecord *Stack;
typedef char ElementType;
#define EmptyTOS -1
#define MinStackSize 5

struct StackRecord
{
int Capacity;
int TopOfStack;
ElementType *Array;
};

void MakeEmpty(Stack S)
{
S->TopOfStack=EmptyTOS;
}
int IsFull(Stack S)
{
return S->TopOfStack== S->Capacity;
}
int IsEmpty(Stack S)
{
return S->TopOfStack==EmptyTOS;
}

Stack CreateStack(int MaxElements )
{
Stack S;

/* 1 */ if(MaxElements<MinStackSize)
/* 2 */ {
printf("Stack size is too small");
exit(0);
}
/* 3 */ S=(Stack)malloc(sizeof(struct StackRecord ) );
/* 4 */ if(S==NULL)
/* 5 */ {
printf("Out of space!!l");
exit(0);
}
/* 6 */ S->Array=(ElementType *)malloc(sizeof(ElementType)*MaxElements);
/* 7 */ if(S->Array==NULL)
/* 8 */ {
printf("Out of space!!l");
exit(0);
}
/* 9 */ S->Capacity=MaxElements;
/*10*/ MakeEmpty(S);
/*11*/ return S;
}

void DisposeStack(Stack S)
{
if(S!=NULL)
{
free(S->Array);
free(S);
}
}

void Push(ElementType X, Stack S)
{
if( IsFull(S) )
{
printf("Full stack");
exit(0);
}
else
S->Array[S->TopOfStack++]=X;//将元素X放入栈中
}

ElementType Top(Stack S)
{
if(!IsEmpty(S) )
return 0;//返回栈顶元素
/* Return value used to avoid warning */
}

void Pop(Stack S)
{
if(IsEmpty(S) )
{
printf("Empty stack");
exit(0);
}
else
S->TopOfStack--;
}

ElementType TopAndPop(Stack S)
{
if(!IsEmpty(S) )
return S->Array[S->TopOfStack--];

}

void main(void)
{
char c1,c2;
Stack S;
int i,MAX;
scanf("%d",&MAX);
fflush(stdin);
S = CreateStack(MAX);//这个函数都没有调用过!
for(i=0;i<MAX;i++)
{
scanf("%c",&c1);//通过键盘输入为变量c1赋值
Push(c1,S);//将c1压入栈中
}
printf("S->TopOfStack: "); //输出栈顶元素
Pop(S); //栈顶元素出栈
for(i=0;i<MAX;i++)
printf("%c",TopAndPop(S));// 输出栈序列
}

这个栈写的不规范,pop那个函数都没有元素返回只是做了简单的把指针减一
改的这个可以运行了,但是运行结果就有点问题!
不太习惯你这个设计栈的方法,你有了个pop为什么还弄个TopAndPop(Stack S)

热心网友 时间:2023-06-29 11:02

肯定是你指针指向不对
太长不太想看,只给你指出一处错误

scanf("%d,&c1");//通过键盘输入为变量c1赋值

这一句,看到啥错误了吧?还有你声明了char干嘛又用%d呢,如果用%c的时候注意这样写
scanf(" %c",&c1);
声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:11247931@qq.com