线性表之栈的链式存储实现
来源:互联网 发布:如何修改mac锁屏界面 编辑:程序博客网 时间:2024/06/08 18:47
栈的链式存储也称为链栈,和链表的存储原理一样,都可以通闲散空间来存储元素,用指针来建立各节点之间的逻辑关系。同顺序栈,链表的插入,删除操作也只能在栈顶进行。
链栈的C语言实现:(codeblocks完美运行)
#include <stdio.h>#include <stdlib.h>typedef struct Node{ int data; //数据域 struct link *next; //指向下一个节点的指针}pNode;typedef struct Stack{ pNode *top; //指向栈顶元素的指针 int size; //栈的大小}linkstack;//初始化链栈linkstack* create(){ linkstack *stack = (linkstack*)malloc(sizeof(linkstack)); if(stack != NULL) { stack->top = NULL; stack->size = 0; } return stack;}//判断栈是否为空,是返回1,不是返回0int IsEmpty(linkstack *stack){ if(stack->top == NULL || stack->size == 0) return 1; return 0;}//获得链栈大小int getsize(linkstack *stack){ return stack->size;}//取得栈顶元素pNode* getTop(linkstack *stack){ if(stack->size != 0) return stack->top; return NULL;}//入栈int Push(linkstack *stack,int val){ pNode *node = (pNode*)malloc(sizeof(pNode)); if(node != NULL) { node->data = val; node->next = getTop(stack); //新元素节点指向下一个节点,链式实现 stack->top = node; //top指向新节点 stack->size++; //栈的大小加1 } return 1;}//出栈pNode* Pop(linkstack *stack){ if(IsEmpty(stack)) { return NULL; } pNode *node = stack->top; //node指向栈顶 stack->top = stack->top->next; //top指向下一个元素 stack->size--; //链栈长度减少 return node;}//销毁栈void Destroy(linkstack *stack){ if(IsEmpty(stack)) { free(stack); printf("\n链表已为空,无需再进行销毁!\n"); } //如果链栈中数据不为空,就需要把栈中的节点都删除再释放 else { while(stack->size >0) { pNode *ptr; ptr = Pop(stack); free(ptr); } printf("链栈消除成功!\n"); }}int main(){ srand((unsigned)time(0)); linkstack *stack = NULL; stack = create(); int i; for(i=0;i<30;i++) Push(stack,rand()%100); if(IsEmpty(stack)) printf("链栈为空!\n"); else { printf("链栈不为空!\n"); printf("栈顶元素为:%d",*((int*)getTop(stack))); //返回的是pNode类型指针,所以要强转成int型 printf("链栈大小为:%d",getsize(stack)); for(i=0;i<30;i++) { if(i%6==0) //每打印6个就换行 printf("\n"); printf("%3d ",*((int*)Pop(stack))); //返回的是pNode类型指针,所以要强转成int型 } } Destroy(stack);//销毁链 return 0;}
阅读全文
0 0
- 线性表之栈的链式存储实现
- 数据学习之线性表的链式存储C++实现
- 线性结构--->栈的链式存储实现
- PHP实现线性表的链式存储
- Java实现链式存储的线性表
- 线性表的链式存储和实现
- 线性表的链式存储与实现
- 线性表的链式存储和实现
- 线性表的链式存储实现c++
- 数据结构之线性表的链式存储
- 数据结构之线性表——栈的链式存储
- 线性表之链式存储
- 线性表的顺序存储实现和链式存储实现
- 线性表(二)之线性表的链式存储结构
- 线性表(List)---栈的链式存储
- 数据结构2----线性表顺序存储和链式存储的实现(霜之小刀)
- 【线性表】顺序存储、链式存储的实现及操作
- 线性表的链式存储
- [BZOJ 1052] 覆盖问题 二分+搜索(DFS)+贪心
- JZOJ 7.10B组第一题 可见点数
- Android PopupWindow的使用和分析
- sqlserver 命令行的使用
- java ip排序实例
- 线性表之栈的链式存储实现
- HDOJ 1059 Dividing(多重背包+二进制优化)
- 我的网站收集
- python核心编程v2.0 第三章习题答案
- Java语言基础(七)
- 各种安装的记录
- 大学微积分1----Taylor中值定理和麦克劳林公式-----1
- eval
- 因子平方和(python实现)