栈的链式存储及其基本运算

#include <stdio.h>
#include <stdlib.h>
#define M 10

typedef struct stnode
{
    char data;
    struct stnode *next;
}LinkStack;

void InitStack(LinkStack *&ls)  //初始化栈
{
    ls=NULL;
}

void PushStack(LinkStack *&ls,char x)//进栈
{
    LinkStack *p;
    p=(LinkStack *)malloc(sizeof(LinkStack));
    p->data=x;
    p->next=ls;
    ls=p;
}

int PopStack(LinkStack *&ls,char &x)//出栈
{
    LinkStack *p;
    if(ls==NULL)
        return 0;
    else
    {
        p=ls;
        x=p->data;
        ls=p->next;
        free(p);
        return 1;
    }
}

int GetTop(LinkStack *ls,char &x)//取栈顶元素
{
    if(ls==NULL)
        return 0;
    else
    {
        x=ls->data;
        return 1;
    }
}

int StackEmpty(LinkStack *ls)//判断栈空
{
    if(ls==NULL)
        return 1;
    else
        return 0;
}

int main()
{
    LinkStack *ls;
    char e;
    InitStack(ls);
    printf("栈%s
",(StackEmpty(ls)==1?"空":"不空"));
    printf("a,b,c,d进栈
");
	
    PushStack(ls,'a');
    PushStack(ls,'b');
    PushStack(ls,'c');
    PushStack(ls,'d');
	PushStack(ls,'f');
	/*
	int i;
	for(i=0;i<5;i++)
	{
		scanf("%c",&e);
		PushStack(ls,e);
	}
	*/
    printf("栈%s
",(StackEmpty(ls)==1?"空":"不空"));
    GetTop(ls,e);
    printf("栈顶元素:%c
",e);
    printf("出栈次序:
");
    while(!StackEmpty(ls))
    {
        PopStack(ls,e);
        printf("%c ",e);
    }
    printf("
");
    return 0;
}
不知为毛注释掉的那一行不行
请dalao不吝赐教。
原文地址:https://www.cnblogs.com/liesun/p/7350350.html