#include <stdlib.h>
#include <stdio.h>
#include <malloc.h>
typedef char elemtype;
typedef struct linknode {
elemtype data;
struct linknode *next;
}listack;
void inistack(listack *&s)
{
s=(listack *)malloc(sizeof(linknode));
s->next=NULL;
}
void clearstack(listack *&s)
{
listack *p;
p=s->next;
free(p);
s->next=NULL;
}
int stacklength(listack *s)
{
int i=0;
listack *p;
p=s;
while(p!=NULL)
{ i++;
p=p->next;
}
printf("\n它的长度是%d.\n",i-1);
}
void stackempty(listack *s)
{
if(s->next==NULL) printf("\n它是一个空栈.\n");
else printf("\n它不是一个空栈.\n");
}
void push(listack *&s)
{
listack *p;
char a;
printf("\n请输入一个字符\n");
scanf("%c",&a);getchar();
p=(listack *)malloc(sizeof(listack));
p->data=a;
p->next=s->next;
s->next=p;
}
void pop(listack *&s)
{
listack *p;
p=s->next;
if(s->next==NULL) printf("\nERROR!!!它是一个空栈.\n"); return;
printf("\n%c",p->data);
s->next=p->next;
free(p);
}
void gettop (listack *s)
{
printf("\n%c",s->next->data);
}
void disptack(listack *s)
{
listack *p;
p=s->next;
while(p!=NULL)
printf("\n%c",p->data);
}
int main(void)
{
int flag=1;
char a;
listack *s;
printf("\n---------------实验2.栈链------------------\n");
printf("你要做什么?请选择:");
printf("\n1.初始化栈链 2.判断栈链S是否为空");
printf("\n3.进栈 4.出栈 ");
printf("\n5.输出栈顶到栈底的元素 6.输出栈链长度 ");
printf("\n7.释放栈链 8.输入其它字符退出\n ");
while(flag)
{
a=getchar();getchar();
printf("\n---------------实验2.栈链------------------\n");
printf("你要做什么?请选择:");
printf("\n1.初始化栈链 2.判断栈链S是否为空");
printf("\n3.进栈 4.出栈 ");
printf("\n5.输出栈顶到栈底的元素 6.输出栈链长度 ");
printf("\n7.释放栈链 8.输入其它字符退出\n ");
switch(a)
{
case '1':inistack(s) ;break;
case '2':stackempty(s); break;
case '3':push(s);break;
case '4':pop(s);break;
case '5':disptack(s);break;
case '6':stacklength(s);break;
case '7':clearstack(s);break;
default:flag=0; break;
}
}
return 0;
}
编译连接都成功了 但是在进栈的时候 就出现问题了 看了好久也没看出是怎么回事 各位帮忙编译看看 小弟感激不尽~~~
(本人用的是dev-c++编译器)
[此贴子已经被作者于2007-6-14 21:06:29编辑过]