栈-链栈

来源:互联网 发布:mac mp4播放器 编辑:程序博客网 时间:2024/05/11 21:51

栈分为静态栈和动态栈,静态栈由数组构建而成。动态栈是由链表构建而成。

栈:后进先出。所有的操作都是在栈顶进行。

总结一下 动态栈。

动态栈由链表构成,所以要定义 链表结构体,栈结构体。链表结构体里有两个元素,一个数据,一个指针。栈结构体也有两个,两个都是指针,指向栈底,指向栈顶。

定义如下:

#include <iostream>#include <string>using namespace std;typedef struct SNode{int data;SNode* p_next;}SNode,*pNode;typedef struct Stack{SNode* pTop;SNode* pBottom;} Stack;void initStack(Stack* );void push(Stack*,int);void traverse(Stack*);int main(){Stack S;initStack(&S);push(&S,3);push(&S,4);push(&S,5);push(&S,6);push(&S,7);traverse(&S);return 0;}void initStack(Stack* pS){SNode* node=(pNode)malloc(sizeof(SNode));pS->pTop=pS->pBottom=node;node->p_next=NULL;if (NULL==pS->pTop){cout << "动态分配内存失败" <<endl;}}void push(Stack* pS,int val){SNode* node=(SNode*)malloc(sizeof(SNode));node->data=val;                //入栈分为三步 1 创建新节点 赋值node->p_next=pS->pTop;  //2节点连入栈pS->pTop=node;               //3栈顶指针指向新节点};void traverse(Stack* pS){SNode* p_node=pS->pTop;while (p_node!=pS->pBottom){cout << p_node->data << " ";p_node=p_node->p_next;  //链表遍历}}


0 0