数据结构-链栈

版权声明:转载请注明出处 https://blog.csdn.net/qq_37689106/article/details/82950978
#include<stdio.h>
#include<stdlib.h>
#include<string.h>

typedef struct node
{
    int data;
    struct node *next;
}linkstack_t;

linkstack_t * creat_empty_linkstack(void)  //创建空的链栈
{
    linkstack_t * s = (linkstack_t *)malloc(sizeof(linkstack_t));
    s->data = 0;
    s->next = NULL;
    return s;
}

void inser_linkstack(linkstack_t *s ,int val)  //压栈 (头插法)
{
    linkstack_t * p = (linkstack_t *)malloc(sizeof(linkstack_t));
    p->data = val;
    p->next = s->next;
    s->next = p;
}

int linkstack_is_empty(linkstack_t *s)   
{
    return (s->next == NULL)?1:0;
}

void pop_linkstack(linkstack_t *s,int *val)  //弹出栈顶(前面采用头插法 也就是弹出首元素)
{
    linkstack_t *p = s->next;
    *val = p->data;
    s->next = p->next;
    free(p);
}

void show_linkstack(linkstack_t *s)  // 显示
{
    linkstack_t *p =s->next;
    while(p != NULL)
    {
        printf("%-3d",p->data);
        p = p->next;
    }
    printf("\n");
}

int main()
{
    linkstack_t * S = creat_empty_linkstack();
    int i,val;
    for(i=1;i<=10;i++)
    {
        inser_linkstack(S,i);
    }
    show_linkstack(S);
    for(i=1;i<=10;i++)
    {
        pop_linkstack(S,&val);
        printf("%-3d",val);
    }
    printf("\n");
    return 0;
}

猜你喜欢

转载自blog.csdn.net/qq_37689106/article/details/82950978