复制可直接跑,日后会在批注一些东西
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>
#include<malloc.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define MAXSIZE 100
typedef int Status;
typedef int SElemType; //或者: #define ElemType int
typedef struct StackNode
{
SElemType data;
struct StackNode* next;
}StackNode, *LinkStackPtr;
typedef struct LinkStack
{
LinkStackPtr top;
int count; //元素个数
}LinkStack;
Status InitLinkStack(LinkStack* S) //为啥和链表的不一样?
{
if (!S)
return ERROR;
S->top = NULL;
S->count = 0;
return OK;
}
Status Push(LinkStack* S, SElemType e)
{
LinkStackPtr s = (LinkStackPtr)malloc(sizeof(StackNode));
s->data = e;
s->next = S->top;
S->top = s;
S->count++;
return OK;
}
Status Pop(LinkStack* S, SElemType* e)
{
LinkStackPtr p;
if (!S)
return ERROR;
*e = S->top->data;
p = S->top;
S->top = S->top->next;
free(p);
S->count--;
return OK;
}
int main()
{
LinkStack S;
int n;
int* t;
t = &n;
InitLinkStack(&S);
Push(&S, 1);
StackNode* node = (&S)->top;
printf("%d\n", node->data);
Pop(&S, t);
node = (&S)->top;
if (node == NULL)
return ERROR;
printf("%d\n", node->data);
return 0;
}