[数据结构]队列的基本操作
2015-12-01 09:23
435 查看
#栈是先进后出,队列则是先进先出.下面贴一下队列的基本操作.
1.队列的顺序表示.
1.1队列的结构体定义
[code]#include <stdio.h> #include <stdlib.h> typedef int DataType; #define MAXNUM 20 /*队列中元素的最大个数*/ struct Seqqueue /*顺序队列类型定义*/ { int f,r; DataType q[MAXNUM]; }; typedef struct Seqqueue Seqqueue,*PSeqqueue; /*创建一个空队列*/ PSeqqueue createEmptyqueue(void); /*判断队列是否为空*/ int isEmptyqueue_seq(PSeqqueue paqu); /*在队列中插入一个元素*/ void enqueue_seq(PSeqqueue paqu,DataType x); /*删除队头元素*/ void dequeue_seq(PSeqqueue paqu); /*对非空队列求队头元素*/ DataType frontqueue_seq(PSeqqueue paqu);
1.2创建队列
[code] PSeqqueue createEmptyqueue(){ PSeqqueue paqu=(PSeqqueue)malloc(sizeof(struct Seqqueue)); if (paqu==NULL) { printf("Out of space.\n"); }else{ paqu->r=paqu->f=0; } return paqu; }
1.3队列中插入元素
[code]void enqueue_seq(PSeqqueue paqu,DataType x){ if ((paqu->r+1)%MAXNUM==paqu->f) { printf("Full queue.\n"); }else{ paqu->q[paqu->r]=x; paqu->r=(paqu->r+1)%MAXNUM; } }
1.4删除对头元素
[code]void dequeue_seq(PSeqqueue paqu){ if (isEmptyqueue_seq(paqu)) { printf("Empty queue\n"); }else{ paqu->f=(paqu->f+1)%MAXNUM; } }
1.5返回对头元素
[code] DataType frontqueue_seq(PSeqqueue paqu){ return paqu->q[paqu->f]; }
1.6判断队列是否为空.
[code]int isEmptyqueue_seq(PSeqqueue paqu){ return paqu->f=paqu->r; }
1.7测试
[code]int main(){ PSeqqueue queue=createEmptyqueue(); enqueue_seq(queue,2); enqueue_seq(queue,3); enqueue_seq(queue,4); printf("%d\n",frontqueue_seq(queue)); return 0; }
2.队列的链式表示
2.1结构体定义和函数声明
[code]#include <stdio.h> #include <stdlib.h> typedef int Datatype; struct Node; typedef struct Node *PNode; struct Node { Datatype info; PNode link; }; struct LinkQueue { PNode f; PNode r; }; typedef struct LinkQueue *PLinkQueue; //创建一个空队列 PLinkQueue createEmptyQueue_link(); //判断队列是否为空 int isEmptyQueue_link(PLinkQueue plqu); //进队列 void enQueue_link(PLinkQueue plqu,Datatype x); //出对列 void deQueue_link(PLinkQueue plqu); //在非空队列中求对头元素 Datatype frontqueue_link(PLinkQueue plqu);
2.2创建队列
[code]PLinkQueue createEmptyQueue_link(){ PLinkQueue plqu=(PLinkQueue)malloc(sizeof(struct LinkQueue)); if (plqu==NULL) { printf("Out of space.\n"); }else{ // PNode pnode=(PNode)malloc(sizeof(struct Node)); plqu->f=plqu->r=NULL; } return plqu; }
2.3入队列
[code]void enQueue_link(PLinkQueue plqu,Datatype x){ PNode pnode=(PNode)malloc(sizeof(struct Node)); if(pnode==NULL){ printf("Out of space.\n"); }else{ pnode->info=x; pnode->link=NULL; if (plqu->f==NULL) { plqu->f=pnode; }else{ plqu->r->link=pnode; } plqu->r=pnode; } }
2.4删除队尾元素
[code]void deQueue_link(PLinkQueue plqu){ PNode pnode; if (plqu->f==NULL) { printf("Empty Queue\n"); }else{ pnode=plqu->f; plqu->f=plqu->f->link; free(pnode); } }
2.5返回对头元素
[code]Datatype frontqueue_link(PLinkQueue plqu){ printf("%d\n",plqu->f->info); return(plqu->f->info); }
2.6队列是否为空
[code]int isEmptyQueue_link(PLinkQueue plqu){ return (plqu->f==NULL); }
2.7测试
[code]int main(){ PLinkQueue p=createEmptyQueue_link(); enQueue_link(p,5); enQueue_link(p,15); enQueue_link(p,35); frontqueue_link(p); deQueue_link(p); frontqueue_link(p); return 0; }
相关文章推荐
- 【数据结构】建立和平衡AVL二叉树
- JavaScript数据结构 --- 散列
- 数据结构之栈
- 分治算法
- 数据结构例程——基数排序
- 数据结构例程——简单的计数排序
- 数据结构例程——归并排序
- 数据结构例程——选择排序之堆排序
- 枚举法的简单心得
- 【数据结构】栈结构操作示例
- 【数据结构】链表操作示例
- 【Educational Codeforces Round 2E】【STL-map 启发式合并 or 线段树动态开节点 】Lomsat gelral 一棵树每点一个颜色问每个节点子树的颜色众数之和
- 数据结构与算法-----队列-使用链表(链式结构)实现
- 第十二周--数据结构--非连通图的遍历之三
- 第九周 数据结构实践项目——数组和广义表【项目3.2-- 稀疏矩阵相加】
- 第十二周--数据结构--非连通图的遍历之二
- 【第14周-查找项目1-1——验证折半查找算法】
- 第9周SHH数据结构-【项目1--猴子选大王(数组版)】 .
- 第8周SHH数据结构-【项目5-计数的模式匹配 . 】
- 第十二周--数据结构--非连通图的遍历之一