C实现顺序栈和链式栈
来源:互联网 发布:淘宝视频教程 编辑:程序博客网 时间:2024/05/17 08:39
C实现顺序栈和链式栈
看到《剑指offer》面试题7,用两个栈实现队列这道题,所以就分别把栈和队列都实现了一下,栈和队列都有两种存储方式,一种是顺序存储,另外一种是链式存储。
栈,有栈顶指针指向当前栈最顶的元素。顺序栈,则栈中的元素用数组保存即可;链式栈,关键是如何通过链表把栈中的元素串起来,栈顶指针top指向当前栈中的栈顶元素,有新的元素入栈时,新的元素的next指向栈顶元素,同时栈顶指针指向新的元素。
顺序栈代码如下:
#include <stdio.h>#include <malloc.h>#define max_size 50typedef struct Stack { int arr[max_size]; int top;}stack;stack *create(){ stack *stk = (stack *)malloc(sizeof(stack)); stk->top = -1; return stk;}void push(stack *s, int val){ s->top ++; s->arr[s->top] = val;}void pop(stack *s, int *val){ *val = s->arr[s->top]; s->top --;}void destroy(stack *s){ free(s);}int main(){ stack *stk;/* 定义一个指针变量,分配的内存空间大小是指针占的内存空间大小,不是指针指向的数据类型的空间 */ //stk = (stack *)malloc(sizeof(stack)); stk = create(); int a = 1, b = 2; int c; push(stk, a); push(stk, b); while (stk->top >= 0) { int tmp = stk->top; printf("%d\n", stk->arr[tmp]); pop(stk, &c); } destroy(stk); return 0;}
链式栈的代码:
#include <stdio.h>#include <malloc.h>typedef struct LNode { int val; struct LNode *next;}node;typedef struct Stack { node *top; int size;}stack;stack *create(){ stack *stk = (stack *)malloc(sizeof(stack)); stk->size = 0; stk->top = NULL; return stk;}void push(stack *s, int val){ node *p = (node *)malloc(sizeof(node)); p->val = val; p->next = s->top; s->top = p; ++ s->size;}void pop(stack *s, int *val){ node *tmp = s->top; *val = s->top->val; s->top = s->top->next; -- s->size; free(tmp);}void destroy(stack *s){ if (!s->size) { free(s); }}int main(){ stack *stk; //stk = (stack *)malloc(sizeof(stack)); stk = create(); int a = 1, b = 2; int c; push(stk, a); push(stk, b); while (stk->size > 0) { printf("%d\n", stk->top->val); pop(stk, &c); } destroy(stk); return 0;}
0 0
- C实现顺序栈和链式栈
- C语言链式栈和顺序栈的实现
- 栈(顺序+链式) java实现
- C++ 实现顺序栈与链式栈操作…
- 栈的顺序存储实现和链式存储实现
- 顺序栈和链式栈
- 顺序栈和链式栈
- C实现链式栈
- C链式栈实现
- c++顺序栈和链式栈的实现
- 数据结构Java实现05----栈:顺序栈和链式堆栈
- 数据结构Java实现05----栈:顺序栈和链式堆栈
- 数据结构Java实现05----栈:顺序栈和链式堆栈
- C++ 顺序栈和链式栈的实现
- 数据结构Java实现05----栈:顺序栈和链式堆栈
- C++栈的顺序存储和链式存储的实现
- C语言实现链式队列和顺序队列
- c/c++实现顺序循环队列和链式队列
- 【Spark】配置Spark源码阅读环境
- 一些练习的简单总结
- STL 之includes,set_intersection,set_union,set_difference,set_symmetric_difference
- 产品经理做产品前问自己六个问题
- 【iOS】手势识别的详细使用:拖动、缩放、旋转、点击、手势依赖、自定义手势
- C实现顺序栈和链式栈
- 超级联盟战队,等待你的加入
- Oracle学习笔记(11)----------建表、更新、查询综合练习
- STL 之for_each,transform
- iOS 使用webView实现图文混排
- Android 多进程环境判断当前进程是否是UI进程
- Maximal Rectangle(最大矩阵)
- List::定义
- test_QVariant.cpp