C语言--模拟栈(使用链表)

来源:互联网 发布:大同集宁之战 知乎 编辑:程序博客网 时间:2024/06/07 08:56

使用链表模拟了栈,有压栈和弹栈
参照《程序员面试宝典》

#include <stdio.h>#include <stdlib.h>typedef struct student{    int data;    struct student *next;} node;typedef struct stakqueue{    node *bottom,*top;}queue;// 压栈queue *push(queue *HQ,int x){    node *s,*p;    s = (node *)malloc(sizeof(node));    s->data = x;    s->next = NULL;    if(HQ->bottom == NULL)  // 栈为空的情况    {        HQ->bottom = s;        HQ->top = s;    }    else    {        HQ->top->next = s;        HQ->top = s;    }    return HQ;}//弹栈queue *pop(queue *HQ){    node *p;    int x;    if(HQ->bottom == NULL)        printf("\n No a node!\n");    else    {        x = HQ->bottom->data;        p = HQ->bottom;        if(HQ->bottom == HQ->top) // 只有一个元素        {            HQ->bottom = NULL;            HQ->top = NULL;            free(p);        }        else        {            while(p->next != HQ->top)  // 因为是链表实现的栈,所以出栈得找到链表尾                p = p->next;            HQ->top = p;            HQ->top->next = NULL;            free(p->next);        }    }    return HQ;}//输出栈中数据void print(queue *HQ){    node *p;    p = HQ->bottom;    printf("||");    while(p != NULL)    {        printf("%d => ",p->data);        p = p->next;    }    printf("\n");}int main(){    queue *myst = new queue();    // 压栈    for(int i = 1; i < 6; i++)    {        myst = push(myst,i);        print(myst);    }    // 弹栈    for(int i = 1; i < 6; i++)    {        myst = pop(myst);        print(myst);    }    getchar();    return 0;}
阅读全文
0 0
原创粉丝点击