数据结构之队列

来源:互联网 发布:ncbi的geo数据库 编辑:程序博客网 时间:2024/06/14 09:07

顺序栈

两栈共享空间:对于两个相同数据类型的栈,可以用数组的两端作为栈低的方法来趟两个栈共享数据,从而最大化的利用数组空间   

链栈


队列:是只允许在一端进项插入操作,而在另一端进行删除操作的线性表,它是一种先进先出(First In First Out )的线性表,简称FIFO。允许插入的一端称为队尾,允许删除的一端称为队头。如键盘的输入到显示器上的显示就是队列的例子

顺序队列

循环队列:为了避免数组插入和删除使需要移动数据,于是引入了循环队列,使得队头和队尾可以在数组中循环变化,解决了移动数据的时间损耗

链队列

.循环队列是事先申请好空间,使用期间释放,链队栈,每次申请和释放结点也会存在一些时间开销。在可以确定队列的最大值的情况下,建议用循环队列

#include<stdio.h>#define size 5#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedef int Status ;typedef int elementType;typedef struct{elementType data[size];int front;//头指针int rear;//尾指针}sqQueue;Status init(sqQueue *queue){//初始化队列queue->front = 0;queue->rear = 0;return OK;}int getQueueLength(sqQueue * queue){//求队列的长度,通用的是 ((rear + 0) + (size - front))%sizereturn (queue->rear +size - queue->front)%size;}Status add(sqQueue * queue,elementType element){//在队列尾部插入元素if((queue->rear + 1)%size == queue->front ){//判断队列是否已满,采用的是头指针与尾指针是否相差一个return ERROR;}queue->data[queue->rear] = element;//rear指针向后移一位,若到最后就转到数组头部queue->rear = (queue->rear + 1)%size;return OK;}Status dele(sqQueue *queue,elementType *element){//队列空的判断if(queue->rear == queue->front){return ERROR;}*element = queue->data[queue->front];//把删除的值赋给elementqueue->front = (queue->front+ 1)%size;//若到最后则转到数组头部return OK;}void print(sqQueue *queue){//打印int a = queue ->front;int i;for( i = a ; i != queue->rear; a++, i = a%size ){printf("%d\t",queue->data[i]);}puts("");}void main()//测试代码{sqQueue queue ;elementType i = 0;int deleteElement;init(&queue);for( ; i<4 ; i++){add(&queue,i);}print(&queue);dele(&queue,&deleteElement);dele(&queue,&deleteElement);add(&queue,7);print(&queue);add(&queue,8);print(&queue);}


0 0
原创粉丝点击