数据结构8:队列的顺序存储结构表示和实现
2014-04-10 14:56
573 查看
1、数据结构的物理存储有顺序和链式之分,但是队列的实现,通常使用链式,因为比较简单一点,但是顺序也是要提一下的,说到底顺序结构就是利用数组搞起;
2、在声明一个队列的数据结构的时候,和链表声明[数据结构6]不一样,只需要一个数组和两个下标就可以了!我就是不明白了,这帮牛逼的人是怎么想出来这些数据结构的!
3、通常情况下,最简单地顺序结构实现队列的思路是:在数组的末端输入,在a[0]的地方删除,删除了元素之后,数组中的所有元素都往前移动一位,这样插入的时间复杂度为O(1),删除的复杂度为O(n),这个复杂度略大;后来人们就想到,使用两个指针,一个指头,一个指尾,删除操作不需要挪动后续元素,只需要将头指针改变一下就OK了;这样又会有一个问题呀,就是说首先数组的长度是有限的,其次,当删除了队前元素的时候,这个地方就空着了,有人就开始想了循环队列的概念:就是说删除了的空间可以被插入操作来使用;
4、判断队列的空或者满栈的话,采用的取余的运算,这样两个下标就可以一直在数组内循环,并且通过判断下标的是否相同来判断是否为空或者满栈!
1、如何判断循环的;
2、如何声明该数据结构的!
2、在声明一个队列的数据结构的时候,和链表声明[数据结构6]不一样,只需要一个数组和两个下标就可以了!我就是不明白了,这帮牛逼的人是怎么想出来这些数据结构的!
3、通常情况下,最简单地顺序结构实现队列的思路是:在数组的末端输入,在a[0]的地方删除,删除了元素之后,数组中的所有元素都往前移动一位,这样插入的时间复杂度为O(1),删除的复杂度为O(n),这个复杂度略大;后来人们就想到,使用两个指针,一个指头,一个指尾,删除操作不需要挪动后续元素,只需要将头指针改变一下就OK了;这样又会有一个问题呀,就是说首先数组的长度是有限的,其次,当删除了队前元素的时候,这个地方就空着了,有人就开始想了循环队列的概念:就是说删除了的空间可以被插入操作来使用;
4、判断队列的空或者满栈的话,采用的取余的运算,这样两个下标就可以一直在数组内循环,并且通过判断下标的是否相同来判断是否为空或者满栈!
#include <stdio.h> #include <stdlib.h> #define MAXSIZE 10 #define ERROR 0 #define OK 1 typedef int ElemType; typedef int Status; typedef struct SqQuene{ ElemType *base; int front; int rear; }SqQuene,*Quene; void InitQuene(Quene Q) { Q->base = (ElemType *)malloc(MAXSIZE*sizeof(SqQuene)); if (!Q->base) { printf("没有足够空间了!"); exit(0); } Q->front = Q->rear = 0; } //插入元素 void InsertQuene(Quene Q,ElemType e) { if ((Q->rear+1)%MAXSIZE == Q->front) { printf("Game Over"); exit(0); } Q->base[Q->rear] = e; Q->rear = (Q->rear+1)%MAXSIZE; } Status DeleteQuene(Quene Q,ElemType *e) { if ((Q->front+1)%MAXSIZE == Q->rear) { printf("队列已经满了!"); exit(0); } *e = Q->base[Q->front]; Q->front = (Q->front+1)%MAXSIZE; } void main() { int i; ElemType e; SqQuene Q; InitQuene(&Q); for (i = 0;i<MAXSIZE-1;i++) { InsertQuene(&Q,i+1); printf("the number is %d:\n",Q.base[Q.rear-1]); } for (i = 0;i<MAXSIZE-1;i++) { DeleteQuene(&Q,&e); printf("删除元素为%d:\n",e); } while(1); }注:
1、如何判断循环的;
2、如何声明该数据结构的!
相关文章推荐
- 数据结构(5):循环队列——队列的顺序表示和实现
- 数据结构(6): 链队——队列的链式表示和实现
- 数据结构之队列的链式表示及其实现
- 数据结构教程第四版*(李春葆)P81~82//队列的顺序存储结构以及实现
- 数据结构之队列――顺序存储结构(php代码实现――方法一)
- 数据结构之队列――顺序存储结构(php代码实现――方法二)
- 【数据结构】(面试题)使用两个栈实现一个队列(详细介绍)
- 数据结构(Data structure):使用双向链表实现队列(C语言)
- 40. 数据结构笔记之四十图的邻接多重链表表示实现
- 数据结构与算法(4)---Java语言实现:队列的单链表定义
- 数据结构1:线性表的顺序表示和实现
- 数据结构 利用循环队列层次遍历一棵二叉树 递归实现
- 数据结构之队列的基本操作入队出队初始化删除-c++代码实现及运行实例结果
- 数据结构之 队列的操作与实现
- 数据结构之---C语言实现链式队列
- 程序员面试宝典之数据结构基础----C++两个栈实现一个队列功能
- 数据结构之队列的实现(c语言)
- 数据结构之线性结构-队列结构(静态队列的实现)
- Javascript数据结构与算法--队列(顺序队列、优先队列、循环队列)的实现与用法
- 数据结构之优先队列--二叉堆(Java实现)