发布网友 发布时间:2022-05-27 02:46
共4个回答
热心网友 时间:2024-12-01 13:21
帮你改了一下。
/*--------头文件和宏定义------------*/
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define TUSE 1
#define FLASE 0
#define FLAG '0'
/*--------数据存储结构定义------------*/
typedef char ElemType;
typedef struct StackNode
{
ElemType data;//数据域
struct StackNode *next; //指针域
} StackNode,*LinkedStack;
/*-----------函数定义和实现------------*/
/*----------链栈的初始化操作-----------*/
LinkedStack LinkedStackInit()
{
LinkedStack top= new StackNode();
top->next = NULL; //构造一个不带头结点的空栈,栈顶指针为top
return top;
}
/*----------链栈的判空操作-----------*/
int LinkedStackEmpty(LinkedStack top)
{
return(top==NULL); //思考:与顺序栈的判空算法比较
}
/*----------链栈的栈长操作-----------*/
int LinkedStackLength(LinkedStack top)
{
int count;
count=0;
LinkedStack hp = top;
while(hp != NULL)
{
count++;
hp=hp->next;
}
return count;
}
//自行设计此程序
/*----------链栈的入栈操作-----------*/
LinkedStack LinkedStackPush(LinkedStack top,ElemType x)
{StackNode *s;
s->data=x;//参考课本设计此程序
s->next=top;
top=s;
return top;
}
/*----------链栈的出栈操作-----------*/
ElemType LinkedStackPop(LinkedStack &top) //注意其参数形式
{
LinkedStack p;
ElemType x;
if (top==NULL) //栈空的情况
printf("栈已空,不能出栈\n");
p=top; //p指向第一个数据结点
x=top->data;
top=top->next;
free(p);
p = NULL;
return x;
}
/*----------链栈的取元素操作-----------*/
ElemType LinkedStackGetTop(LinkedStack top )
{
if (top==NULL) //栈空的情况
printf("栈已空,不能出栈\n");
return (top->data);
}
/*----------输出整个栈元素的操作-----------*/
void LinkedStackOutput(LinkedStack top)
{
LinkedStack p=top;
printf("此栈中的元素由栈顶开始依次为:\n ");
while (p!=NULL)
{
printf("%c ",p->data);
p=p->next;
}
printf("\n");
}
/*----------主函数-----------*/
void main()
{
//初始化链栈A
LinkedStack A,B;
printf("初始化栈A\n");
A=LinkedStackInit();
printf("请将元素依次进栈\n"); //元素依次进栈
ElemType x;
scanf("%c",&x);
LinkedStack newp = NULL;
if ((newp = new StackNode()) == NULL)
{
printf("apply memory error");
exit(1);
}
newp->data = x;
newp->next = NULL;
A = newp;
getchar();
B = A;
while(x!=FLAG)
{
scanf("%c",&x);
LinkedStack newp = NULL;
if ((newp = new StackNode()) == NULL)
{
printf("apply memory error");
exit(1);
}
newp->data = x;
newp->next = NULL;
B->next = newp;
B = B->next;
getchar();
}
LinkedStackOutput(A);
printf("栈长度:%d\n",LinkedStackLength(A)); //输出栈的长度
printf("栈顶元素为:%c\n",LinkedStackGetTop(A )); //取出栈顶元素
printf("元素出栈,出栈元素为%c\n",LinkedStackPop(A)); //元素出栈
printf("元素出栈,出栈元素为%c\n",LinkedStackPop(A));
LinkedStackOutput(A);
printf("此时栈为%s\n",(LinkedStackEmpty(A)?"空":"非空")); //判栈是否为空
}
热心网友 时间:2024-12-01 13:21
LinkedStack LinkedStackInit()热心网友 时间:2024-12-01 13:21
初始化栈后得到的A的值是NULL啊,你之后的元素进栈往哪进?A=A->next,空指针哪有next热心网友 时间:2024-12-01 13:22
代码有问题