动态栈 栈结构的链式实现

来源:互联网 发布:尤里过知乎 编辑:程序博客网 时间:2024/06/05 16:30

用链表形式实现栈结构的实现,栈链式实现可以不受空间的限制,没有栈上限熟练限制,使用更灵活。

#include <iostream>typedef int DataType;enum{OK, ERROR, FAILED};struct Node{DataType data;Node* next;};typedef struct Stack{Node* top;// 栈顶指针动态维护 当top==NULL时空栈int length;// 动态栈数据大小}DStack;// 初始化栈顶指针和数据int InitStack(DStack& stack){stack.top = NULL;stack.length = 0;return OK;}// 入栈 将val压入栈int Push(DStack& stack, DataType val){Node* tmp = (Node*) malloc(sizeof(Node));if (NULL == tmp){std::cout << "Push to stack failed~" << std::endl;return FAILED;}tmp->data = val;tmp->next = stack.top;// 新加入的节点变成栈顶节点 就next只像旧的栈顶指针stack.top = tmp;// top指向新栈顶元素stack.length++;return OK;}int DStackEmpty(DStack& stack){return stack.length == 0;}int DStackSize(DStack& stack){return stack.length;}int Pop(DStack& stack){if (DStackEmpty(stack))// 判断是否已经是空栈{std::cout << "POP stack is empty" << std::endl;return ERROR;}Node* ptr = stack.top;// 栈顶寄存在ptrstack.top = ptr->next;// 先将top指针指向下一个元素 即将变成新的栈顶stack.length--;free(ptr);//  释放栈顶元素 出栈成功ptr = NULL;return OK;}


0 0
原创粉丝点击