#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
typedef int ELEM_TYPE;
typedef struct LStack
{
ELEM_TYPE data;
LStack* next;
ELEM_TYPE length;
}LStack,*PLStack;
void Init_stack(PLStack ps);
bool Push(PLStack ps, ELEM_TYPE val);
bool Pop(PLStack ps, ELEM_TYPE* rtval);
bool Top(PLStack ps, ELEM_TYPE* rtval);
int Get_length(PLStack ps);
bool IsEmpty(PLStack ps);
bool IsFull(PLStack ps);
static void Inc(PLStack ps);
void Clear(PLStack ps);
void Destroy(PLStack ps);
void Show(PLStack ps);
#include"listStack.h"
void Init_stack(PLStack ps)
{
assert(ps != NULL);
ps->next = NULL;
ps->length = 0;
}
bool Push(PLStack ps, ELEM_TYPE val)
{
assert(ps != NULL);
LStack* s = (LStack*)malloc(sizeof(LStack) * 1);
if (NULL == s)exit(1);
LStack* p = ps;
s->data = val;
s->next = p->next;
p->next = s;
ps->length++;
return true;
}
bool Pop(PLStack ps)
{
assert(ps != NULL);
LStack* p = ps;
LStack* q = p->next;
p->next = q->next;
free(q);
q = NULL;
ps->length--;
return true;
}
bool Top(PLStack ps, ELEM_TYPE* rtval)
{
assert(ps != NULL);
LStack* p = ps->next;
*rtval = p->data;
return true;
}
int Get_length(PLStack ps)
{
assert(ps != NULL);
return ps->length;
}
bool IsEmpty(PLStack ps)
{
return ps->length == 0;
}
bool IsFull(PLStack ps);
static void Inc(PLStack ps)
{
}
void Clear(PLStack ps)
{
Destroy(ps);
}
void Destroy1(PLStack ps)
{
while (ps->next != NULL)
{
LStack* p = ps->next;
ps->next = p->next;
free(p);
p = NULL;
}
}
void Destroy2(PLStack ps)
{
LStack* p = ps->next;
LStack* q = NULL;
ps->next = ps;
while (q != NULL)
{
q = p->next;
free(p);
p = q;
}
}
void Show(PLStack ps)
{
assert(ps != NULL);
LStack* p = ps->next;
while (p!=NULL)
{
printf("%d ", p->data);
p = p->next;
}
printf("\n");
}
int main()
{
LStack pl;
Init_stack(&pl);
for (int i = 0; i < 10; i++)
{
Push(&pl, i + 1);
}
Show(&pl);
int tmp;
Top(&pl, &tmp);
Show(&pl);
printf("%d\n", tmp);
Pop(&pl);
Show(&pl);
return 0;
}