第3章 栈、队列和数组
来源:互联网 发布:java教程入门视频 编辑:程序博客网 时间:2024/05/22 09:48
// 栈、队列、数组// 顺序栈// 静态分配#define STACKSIZE 100struct SqStack{ SElemType elem[STACKSIZE]; // 用数组存储顺序栈 int top; // 栈顶下标};// 一般情况下,非空栈时top始终在栈顶元素的位置// 动态分配#define STACK_INIT_SIZE 100 // 栈初始大小#define STACKSIZEINCREMENT 10 // 栈增长大小struct SqStack{ SElemType *base; // 栈底位置 SElemType *top; // 栈顶位置 int stacksize;};// 一般情况下,非空栈是top始终在栈顶元素的下一个位置。// 顺序栈上基本操作的实现// (1)入栈// 静态分配Status Push(SqStack &S, SElemType e){ if(S.top == STACKSIZE-1) // 栈满不能入栈 return ERROR; else { /* * 重要 */ S.elem[++S.top] = e; // top始终在栈顶元素位置 return OK; }}// 动态分配Status Push(SqStack &S, SElemType e){ if(S.top - S.base >= S.stacksize) { ... // 栈满追加存储空间 } /* * 重要 */ *S.top++ = e; // top始终在栈顶元素的下一个位置 return OK;}// (2)出栈// 静态分配Status Pop(SqStack &s, SElemType &e){ if(S.top == -1) return ERROR; /* * 重要 */ e = S.elem[S.top--]; return OK;}// 动态分配Status Pop(SqStack &S, SElemType &e){ if(S.top == S.base) return ERROR; /* * 重要 */ e = *--S.top; return OK;}// 链栈typedef struct StackNode{ SElemType data; struct StackNode *next;}StackNode, *LinkStack;// 链队列typedef struct Qnode // 结点类型{ QElemType data; struct QNode *next;}Qnode, *QueuePtr;struct LinkQueue{ QueuePtr front; // 队头指针 QueuePtr rear; // 队尾指针};/** 重要*/// 顺序队列#define MAXQSIZE 100struct SeQueue{ ElemType data[MAXQSIZE]; // 队列元素的存储空间 int rear, front; // 队头队尾指针};/** 设队头指针指向队头元素的前面一个位置,队尾指针指向队尾元素。*/// (1)入队sq->data[++sq->rear] = x;// (2)出队x = sq->data[++sq->front];// 循环队列/** “假上溢”现象,判断循环队列的“空”和“满”,不能以头指针和尾指针是否相等来确定,一般可以通过以下几种方法:* (1)另设一个标志位来区别队列的空和满;* (2)设置一个计数器记录队列中元素总数,不仅可以判断空和满,还可以得知队列中元素的个数;* (3)少用一个元素的空间,每次入队前测试入队后头尾指针是否会重合,如果会重合就认为队列已满。*/#define MAXQSIZE 100struct SqQueue{ QElemType *base; // 动态分配存储空间 int front; // 头指针,若队列不空,指向队头元素 int rear; // 尾指针,对队列不空,指向队尾元素的下一个元素};// 循环队列上基本操作的实现// (1)入队Status EnQueue(SqQueue &Q, QElemType e){ if((Q.rear + 1) % MAXQSIZE == Q.front) return ERROR; /* * 重要 */ Q.base[Q.rear] = e; Q.rear = (Q.rear + 1) % MAXQSIZE; return OK;}// (2)出队Status DeQueue(SqQueue &Q, QElemType &e){ if(Q.front == Q.rear) return ERROR; /* * 重要 */ e = Q.base[Q.front]; Q.front = (Q.front + 1) % MAXQSIZE; return OK;}// (3)循环队列元素个数(Q.rear - Q.front + MAXQSIZE) % MAXQSIZE
0 0
- 第3章 栈、队列和数组
- 数据结构 第3章 栈和队列
- 第3章 栈和队列
- 第3章栈和队列
- 第3章 表、栈和队列
- 第3章栈和队列
- 第3章 表 栈 和 队列
- 第3章 表、栈和队列
- 寒假第三天--栈和队列--约瑟夫问题 (数组)
- (第4讲)栈和队列的数组实现
- 第3章 栈和队列——循环队列的元素的插入和删除
- 第3章 表、栈、和队列 课后练习
- 第3章《栈和队列》 思维导图
- 数据结构(第3章: 栈和队列)
- 数据结构笔记整理第3章:栈和队列
- 第3章 栈和队列的应用
- 第3章——表、栈和队列
- 第3章 栈和队列综合习题(leetcode+vjudge)
- WPF开篇
- GoogleMaps踏坑之旅(三)
- oracle外键属性
- 如何检查软键盘是否可见
- ajax加载动画指令
- 第3章 栈、队列和数组
- Linux管理员不得不知道的知识点
- 围观神仙打架,反革命工程师《iOS应用架构谈 组件化方案》和蘑菇街Limboy的《蘑菇街 App 的组件化之路》的阅读指导
- css3写导入跳动的音乐
- 深入理解 HTTP 协议 POST 与PUT 方法区别
- WPF Step By Step -基础知识介绍
- java 电话号码归属地查询
- 从ArrayList看Java泛型
- java对象流与序列化