/*
2020/10/31
现在我要写一个动态栈
首先要写数据结构
数据结构包括:
链栈节点
指针节点
然后再写实现它的函数
*/
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OK 1
typedef int Status;
typedef int SElemType;
typedef struct StackNode
{
SElemType data;
StackNode *next;
}NODE,*PNODE;
typedef struct
{
PNODE pTOP;
PNODE pBottom;
}Stack,*LinkStack;
Status initStack(LinkStack S);
Status push(LinkStack S,SElemType num);
Status pop(LinkStack S,SElemType *val);
Status treverse(LinkStack S);
int main()
{
SElemType val;
Stack S;
initStack(&S); //建站
push(&S,2);//压栈
push(&S,3);//压栈
push(&S,4);//压栈
pop(&S,&val);//出栈
treverse(&S);//遍历
//Bravo!
}
Status initStack( LinkStack S)
{
S->pBottom = (PNODE)malloc(sizeof(NODE));
if(NULL == S->pBottom)
{
printf("申请空间失败!");
return ERROR;
}
S->pBottom->next = NULL;
S->pBottom->data = 0;
S->pTOP = S->pBottom;
return OK;
}
Status push(LinkStack S,SElemType num)
{
PNODE r = (PNODE)malloc(sizeof(NODE));
r->data = num;
r->next = S->pTOP;
S->pTOP = r;
r = NULL;
return OK;
}
Status push(LinkStack S,SElemType num)
{
PNODE r = (PNODE)malloc(sizeof(NODE));
r->data = num;
r->next = S->pTOP;
S->pTOP = r;
r = NULL;
return OK;
}
Status pop(LinkStack S,SElemType *val)
{
PNODE p;
if(NULL == S->pTOP->next)
{
return ERROR;
}
*val = S->pTOP->data;
p = S->pTOP;
S->pTOP = S->pTOP->next;
free(p);
return OK;
}
Status treverse(LinkStack S)
{
PNODE p;
p = S->pTOP;
while(p->next)
{
printf("%d\n",p->data);
p=p->next;
}
return OK;
}
笔记:
以上。