链栈相关操作

#include <stdio.h>
#include <stdlib.h>

#define TRUE 1
#define FALSE 0

typedef int ElemType;

typedef struct node
{
    ElemType data;
    struct node *next;
}StackNode, *LinkStack;  //定义结点和头指针类型名

/*构造空栈*/
void InitStack(LinkStack &top)    
{   
    top = NULL;    //栈顶top就是链表的第一个结点
}

/*判断是否是空栈*/
int IsEmpty(LinkStack &top)
{
    if(NULL == top)
	{
		return TRUE;
	}
    return FALSE;
}

/*进栈操作*/
void Push(LinkStack &top, ElemType e)
{
    LinkStack p = (StackNode *)malloc(sizeof(StackNode)); //申请新节点
    p->data = e;     //元素值写入新生成的结点的数据域
    p->next = top;  //插入*p结点为第一个结点 
    top = p;        //新结点成为新的栈顶元素
}

/*出栈操作*/
int Pop(LinkStack &top, ElemType e) 
{
   	if(NULL == top)
	{
		return FALSE;
	}
    StackNode *p = top;
    e = p->data;
    top = p->next;
    free(p);
    return TRUE;
}

int GetTop(LinkStack top, ElemType e) 
{
	if(NULL == top)
	{
		return FALSE;
	}
    e = top->data;
	printf("栈顶元素是:%d\n",e);
	return TRUE;
}


void main()
{
    LinkStack s = (LinkStack)malloc(sizeof(StackNode));
    int a = IsEmpty(s);
	printf("%d\n", a);
	for(int i=0; i<10; i++)
	{
		Push(s,i);
	}
	int b = 0;
	Pop(s,b);
	GetTop(s,b);
}

 

你可能感兴趣的:(链栈相关操作)