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); }}