数据结构:栈

1.定义算法

  一种能够实现“先进后出”的存储结构函数

  栈相似于箱子,往箱子里面放书,先放进去的最后才能拿出来内存

2.分类it

  静态栈io

  动态栈变量

3.算法遍历

  出栈db

  入栈内存分配

4.应用di

  函数调用

  中断

  表达式求值

  内存分配

  缓冲处理

  迷宫

5.代码实现

#include <stdio.h>#include <stdlib.h>#include <stdbool.h>//实现栈的功能,先进后出typedef struct Node{    int data;    struct Node * pNext;}NODE, *PNODE;typedef struct Stack{    PNODE pTop;    PNODE pBottom;}STACK, *PSTACK; //STACK 等价于struck Stack*void Init(PSTACK);void push(PSTACK, int);void traverse(PSTACK);bool pop(PSTACK, int * );bool empty(PSTACK);int main(){    int val;    STACK S; //STACK 等价于struct Stack    Init(&S);    push(&S, 1);    push(&S, 2);    push(&S, 3);    push(&S, 4);    push(&S, 5);    push(&S, 6);    traverse(&S); //遍历输出    if (pop(&S, &val))    {        printf("出栈成功!出栈的元素是%d\n",val);    }    else    {        printf("出栈失败!\n");    }    clear(&S);    traverse(&S);    return 0;}void Init(PSTACK pS){    pS->pTop = (PNODE)malloc(sizeof(NODE));    if (NULL == pS->pTop)    {        printf("动态内存分配失败!\n");        exit(-1);    }    else    {        pS->pBottom = pS->pTop;        pS->pTop->pNext = NULL; // pS->pBottom->pNext = NULL;    }}void push(PSTACK pS, int val){    PNODE pNew = (PNODE)malloc(sizeof(NODE));    pNew->data = val;    pNew->pNext = pS->pTop;    pS->pTop = pNew;    return;}void traverse(PSTACK pS){    if (empty(pS))    {        printf("栈为空,没法遍历");    }    else    {        PNODE p = pS->pTop;        while(p != pS->pBottom)        {            printf("%d ",p->data);            p = p->pNext;        }    }    printf("\n");    // pBottom一直是垃圾值    return;}bool empty(PSTACK pS){    if (pS->pTop == pS->pBottom)    {        return true;    }    else    {        return false;    }}//把pS所指向的栈出栈一次,并把出栈的元素存入pVal形参所指向的变量中,若是出栈失败,则返回falsebool pop(PSTACK pS, int * pVal){    if (empty(pS)) //pS自己存放的就是S的地址,if(empt返回true则执行return false)    {        return false;    }    else    {        PNODE r = pS->pTop;        *pVal = r->data;        pS->pTop = pS->pTop->pNext;        free(r);        r = NULL;        return true;    }}//clear清空void clear(PSTACK pS){    if (empty(pS))    {        return;    }    else    {        PNODE ClearNode = pS->pTop;        PNODE TempNode = pS->pTop;//        while(ClearNode != pS->pBottom)    //        {//            TempNode = ClearNode->pNext;//            free(ClearNode);//            ClearNode = TempNode;//        }        while(ClearNode != NULL)    //更容易被理解        {            TempNode = ClearNode;            ClearNode = ClearNode->pNext;            free(TempNode);        }        Init(pS);    }}

相关文章
相关标签/搜索