- #include
- #include
- #include
- #include "linkstack.h"
-
- int main(int argc, char *argv[])
- {
- linkstack s;
- s = stack_create();
-
-
- if(s == NULL)
- {
- return -1;
-
- }
- stack_push(s, 10);
- stack_push(s, 20);
- stack_push(s, 30);
- stack_push(s, 40);
- stack_push(s, 50);
- #if 0
- while(!stack_empty(s))//栈不空,出栈
- {
- printf("pop : %d\n",stack_pop(s));
- }
-
- #endif
- s = stack_free(s);
-
- return 0;
- }
- typedef int data_t;
-
- typedef struct node{
- data_t data;
- struct node *next;
-
- }listnode, *linkstack;
-
- linkstack stack_create();
- int stack_push(linkstack s, data_t value);
- data_t stack_pop(linkstack s);
- int stack_empty(linkstack s);
- data_t stack_top(linkstack s);
- linkstack stack_free(linkstack s);
-
- #include
- #include
- #include
- #include "linkstack.h"
-
-
- linkstack stack_create(){
- linkstack s;
- s = (linkstack)malloc(sizeof(listnode));
- if(s == NULL)
- {
- printf("malloc failed\n");
- return NULL;
- }
- s->data = 0;
- s->next = NULL;
-
- }
- int stack_push(linkstack s, data_t value){
- linkstack p;
- if(s == NULL)
- {
- printf("s is NULL\n");
- return -1;
- }
- p = (linkstack)malloc(sizeof(listnode));
- if(p == NULL)
- {
- printf("malloc failed\n");
- return -1;
- }
-
- p->data = value;
- //p->next = NULL;
-
-
- p->next = s->next;
- s->next = p;
-
- return 0;
-
-
- }
- data_t stack_pop(linkstack s){
- linkstack p;
- data_t t;
-
- p = s->next;
- s->next = p->next;
-
- t = p->data;
-
- free(p);
-
- p=NULL;
-
- return t;
-
-
-
- }
-
- //1-empty
- int stack_empty(linkstack s){
- if(s == NULL)
- {
- printf("s is NULL\n");
- return -1;
- }
-
- return (s->next == NULL ? 1 : 0);
-
- }
- data_t stack_top(linkstack s){
-
- return (s->next->data);//栈顶的元素
-
- }
- linkstack stack_free(linkstack s){
- linkstack p;
-
- if(s == NULL)
- {
- printf("s is NULL\n");
- return NULL;
- }
-
- while(s != NULL)
- {
- p = s;
- s = s->next;
- printf("free:%d\n",p->data);
- free(p);
- }
-
- return NULL;
-
- }
-