分类: C/C++
2008-09-19 20:52:19
typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode,*LinkStack;//定义链栈
void InitStack(LinkStack &s)
{
s=(LinkStack)malloc(sizeof(Lnode));
s->next=NULL;
printf("请输入6个栈元素:");
scanf("%d",&s->data);
for(int i=0;i<5;i++)
{
LinkStack p=(LinkStack)malloc(sizeof(Lnode));
scanf("%d",&p->data);
p->next=s;
s=p;//s指向栈顶,随元素个数的变化而改变
}
}//初始化栈
int StackEmpty(LinkStack s)
{
if(s==NULL) return 1;//栈空
else return 0;
}//判断链栈是否为空
void Pop(LinkStack &s, int &e)
{
if(!s) printf("error\n");
e=s->data;
LinkStack p=s;
s=s->next;
free(p);
}//删除链栈中的元素
void Print(LinkStack s)
{
while(!StackEmpty(s))
{
int e;
Pop(s,e);
printf("%d ",e);
}
}//输出栈中元素
void Push(LinkStack &s, int e)
{
LinkStack p=(LinkStack)malloc(sizeof(Lnode));
p->data=e;
p->next=s;
s=p;//指向栈顶元素
}//向栈顶插入元素
void GetTop(LinkStack s,int &e)
{
if(!s) printf("error1\n");
e=s->data;
}//取栈顶元素
int StackLength(LinkStack s)
{
int j=0;
while(s)
{
s=s->next;
j++;
}
return j;
}//求链栈的长度
main()
{
int a;
int b;
LinkStack s;
InitStack(s);
GetTop( s,a);
Push(s,99);
b=StackLength(s);
Print(s);
printf("栈顶元素:%d",a);
printf("栈的长度:%d",b);
return 0;
}