栈和队列
来源:互联网 发布:上班自动签到软件 编辑:程序博客网 时间:2024/06/05 16:22
关于栈和队列是两种特殊的线性表
一.栈:是一种先进后出的线性表。
1.以下是顺序表表示的方法及相关的定义:
具体的结构如下:
typedef struct { ElemType *base; ElemType *top; int stacksize; }Sqstack;
构造一个空栈
int initstack(Sqstack &L){ L.base = (ElemType*)malloc(INIT_SIZE*sizeof(ElemType)); if(!L.base)exit(OVERFLOW); L.top = L.base; L.stacksize = INIT_SIZE; return OK; }
其它操作如push,pop,traverse等操作均为一些简单的操作,在此就不再贴出相关代码
2.以下是链式表示的方法及相关的定义:
具体结构如下:
typedef structnode { ElemType data;struct node*next; }stacknode;
构造一个空栈此时就是一个逆序建立一个链表的过程其中栈底不带元素由此可以看出就是一种链表所以回归到栈就是一种线性表的主题了
intcreatestack(stacknode &L){ L =(stacknode*)malloc(sizeof(stacknode)); L->next = null;for(i=n;i>0;i--){ p =(stacknode*)malloc(sizeof(stacknode)); scanf(“%d”,p->data); p->next = L->next; L->next = p; }}
二.队列:是种后进后出的线性表
第一种表示方法类似于链表
typedef struct QNode { QElemType data; struct QNode *next;}QNode, *QueuePtr;
typedef struct { QueuePtr front; //队头指针 QueuePtr rear; //队尾指针}LinkQueue;
第二种表示方法
顺序存储结构的类型定义
#define MAXQSIZE 100typedefstruct{ QElemType*base; //初始化的存储空间 int front; //头指针 int rear; //尾指针}SqQueue;
循环队列的基本特点有:
无法动态地分配空间只能用固定长度的数组表示
入队: sq[rear]=x;
rear=(rear+1)%M;
出队: x=sq[front];
front=(front+1)%M;
队列初始化:front = rear = 0;
队空条件:front == rear
队满条件:front = (rear+1)%maxsize
初始化一个队列 void initQueue(SqQueue &q){ Q.base =(ElemType*)malloc(MAXSIZE*sizeof(ElemType)); if(!Q.base) exit(ERROR);Q.front = Q.rear=0;} 求队列的长度intQueueLength(SqQueue Q){ return (Q.rear – Q.front +MAXQSIZE)%MAXQSIZE;}入队StatusEnQueue(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; }出队StatusDeQueue(SqQueue &Q, QElemType &e){ if(Q.front == Q.rear) return ERROR; e = Q.base[Q.front]; Q.front = (Q.front+1) % MAXQSIZE; return OK; }
综上两种特点在选择队列的时候如果出现长度无法估计就用链队列!
- 栈和队列--队列
- 【栈和队列】队列
- 栈、队列和优先队列
- 栈和队列(队列)
- 栈和队列--栈
- 【栈和队列】栈
- 栈和队列
- 栈和队列
- 表、栈和队列
- 栈和队列
- 栈和队列应用
- 栈和队列
- 栈和队列
- 栈和队列
- 栈和队列
- 栈和队列
- 队列和栈
- 栈和队列 小结
- python数组的使用
- The Age Of Big Data Coming
- 【Android 设计】:模式_ Android新特性
- Android ----制作自己的Vendor
- 错误 LNK1120
- 栈和队列
- Python 101 – Intro to XML Parsing with ElementTree
- Jump into Linux kernal - CPU - (1)
- load()和get()
- 《大话设计模式》读书笔记:建造者模式与观察者模式
- 聊聊Android中那些无处不在的回调
- 条件变量与互斥锁、信号量的区别
- 破解android锁屏密码
- C++系列文章之《C++语言设计与演化》读书笔记