#ifndef __LINKSTACK_H__
#define __LINKSTACK_H__
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct linklist {
int data;
struct linklist *next;
}linklist_t;
typedef struct linkstack {
linklist_t *top;
char owner[64];
}linkstack_t;
linkstack_t *create_linkstack(char *name);
int is_empty_linkstack(linkstack_t *s);
int push_linkstack(linkstack_t *s, int x);
int pop_linkstack(linkstack_t *s);
void show_linkstack(linkstack_t *s);
#endif
#include "linkstack.h"
linkstack_t *create_linkstack(char *name)
{
linkstack_t *s = (linkstack_t *)malloc(sizeof(linkstack_t));
s->top = NULL;
strcpy(s->owner, name);
return s;
}
int is_empty_linkstack(linkstack_t *s)
{
return s->top == NULL;
}
int push_linkstack(linkstack_t *s, int x)
{
int ret = (s != NULL);
if (ret)
{
linklist_t *node = (linklist_t *)malloc(sizeof(linklist_t));
node->data = x;
node->next = NULL;
node->next = s->top;
s->top = node;
}
return ret;
}
int pop_linkstack(linkstack_t *s)
{
int ret = (s != NULL);
if (is_empty_linkstack(s))
{
puts(" s is empty \n");
return -1;
}
if (ret)
{
linklist_t *del = s->top;
s->top = s->top->next;
ret = del->data;
free(del);
del = NULL;
}
return ret;
}
void show_linkstack(linkstack_t *s)
{
if (is_empty_linkstack(s))
{
puts(" s is empty \n");
return;
}
linklist_t *p = s->top;
while(p)
{
printf("%d \n", p->data);
p = p->next;
}
putchar(10);
}
int main(int argc, const char *argv[])
{
int i = 0;
linkstack_t *s = create_linkstack("hello");
for (i = 0; i < 10; i++)
push_linkstack(s, i);
show_linkstack(s);
for (i = 0; i < 5; i++)
pop_linkstack(s);
show_linkstack(s);
return 0;
}