数据结构之栈(C语言实现)

来源:互联网 发布:asp信息录入系统源码 编辑:程序博客网 时间:2024/04/18 16:12

好久没有写C语言了,有些生疏,现在来回味一下。

主要来实现一下动态栈

这里写图片描述

栈底空元素空用来保存栈底指针,判断栈空,假如没有该空节点,将如法判断是否为栈空。(两个栈顶和栈底都指向第一个元素)

结构体

typedef struct Node{    int data;//数据域      struct Node * PNext;//指针域  } Node, * PNext;typedef struct Stack {    PNext top;    PNext bottom;}Stack, * PStack;

附上代码

#include<stdio.h>  #include<malloc.h>  #include<stdbool.h>  typedef struct Node{    int data;    struct Node * PNext;} Node, * PNext;typedef struct Stack {    PNext top;    PNext bottom;}Stack, * PStack;void  init(PStack PStack){    PStack->bottom = (PNext)malloc(sizeof(Node));    PStack->top = PStack->bottom;    PStack->top->PNext = NULL;}void traverse(PStack Ps){    if (Ps->bottom == Ps->top)    {        printf("栈为空\n");        return;    }    PNext pt = Ps->top;    while (pt != Ps->bottom)    {        printf("%d ", pt->data);        pt = pt->PNext;    }    printf("\n");    return;}void push(PStack Pstack, int val){    PNext Pnew = (Node *)malloc(sizeof(Node));//生成一个新节点      Pnew->data = val;    Pnew->PNext = Pstack->top;    Pstack->top = Pnew;}void pop(PStack ps){    if (ps->top == ps->bottom)    {        printf("栈为空,无法完成出栈操作\n");        return;    }    PNext temp = ps->top;//引入辅助变量,用于释放内存      ps->top = ps->top->PNext;    free(temp);    temp = NULL;}void clear(PStack ps){    while (ps->top != ps->bottom)    {        PNext temp = ps->top;        ps->top = ps->top->PNext;        free(temp);    }}int main(){    Stack stack;    init(&stack);    push(&stack, 6);    push(&stack, 7);    push(&stack, 8);    traverse(&stack);    pop(&stack);    traverse(&stack);    clear(&stack);    traverse(&stack);    push(&stack, 7);    traverse(&stack);    return 0;}
0 0
原创粉丝点击