数据结构顺序队列的各种操作
2013-05-21 21:49
369 查看
/** 头文件stu.h @jeasn168 */ #include<stdio.h> #include<string.h> #define MaxS 50 typedef struct { char name[MaxS]; char stuno[MaxS]; float score; }stu; //输出stu void DispStu(const stu &s) { printf("Name:%s\n",s.name); printf("StuNo:%s\n",s.stuno); printf("Score:%f\n",s.score); } //比较stu类型 int isEqual(const stu &a,const stu &b) { if(strcmp(a.name,b.name)==0&&strcmp(a.stuno,b.stuno)==0&&a.score==b.score) return 1; else return 0; } /** 顺序队列SqQueue.cpp 队尾插入,队首删除 @jeasn168 */ #include<stdio.h> #include<malloc.h> #include"stu.h" #define MaxSize 5//对的最大长度+1 typedef stu ElemType; //定义顺序队列结构 typedef struct { ElemType data[MaxSize]; int front; int rear; }SqQueue; //初始化 void InitQueue(SqQueue *&q) { q=(SqQueue *)malloc(sizeof(SqQueue)); q->front=q->rear=0; } //销毁队列 void DestroyQueue(SqQueue *&q) { free(q); printf("销毁队列!\n"); } //判断对是否为空 int QueueEmpty(SqQueue *q) { return(q->front==q->rear); } //判断对是否已满 int QueueFull(SqQueue *q) { return((q->rear+1)%MaxSize==q->front); } //求队列长度 int QueueLength(SqQueue *q) { int len=q->rear-q->front; return(len>0?len:MaxSize+len); } //入队,从队尾入队,食堂排队打饭 int enQueue(SqQueue *&q,const ElemType &e) { if(QueueFull(q)) { printf("队满!\n"); return 0; } q->rear=(q->rear+1)%MaxSize; q->data[q->rear]=e; return 1; } //出队,从队首出队 int deQueue(SqQueue *&q,ElemType &e) { if(QueueEmpty(q)) { printf("队已空!\n"); return 0; } q->front=(q->front+1)%MaxSize;//q->front指向未知量,q->front+1才是队列的第一个元素!,出队的元素还在数组中。 e=q->data[q->front]; //q->front++; return 1; } //输出队列元素,从队首到队尾 void DispQueue(SqQueue *q) { int i,j; if(q->front<q->rear) { //队首比队尾小 for(i=q->front+1;i<=q->rear;i++) { DispStu(q->data[i]); printf("\n"); } } else { //对首比队尾大 for(i=q->front+1;i<q->front+QueueLength(q)-q->rear;i++) { DispStu(q->data[i]); printf("\n"); } // printf("q->data[i]=:\n"); // DispStu(q->data[i-1]); printf("#######从数组头部开始############\n"); for(j=0;j<=q->rear;j++) { DispStu(q->data[j]); printf("\n"); } } } int main() { stu student[5]={{"Li","S12101",85},{"Liu","S12102",92.5},{"Wang","S12103",54},{"Huang","S12104",76},{"John","S12105",78}}; stu st1={"LiLy","S12108",85},st2; int t=sizeof(student)/sizeof(stu); int i=0; SqQueue *stuQueue; printf("初始化!\n"); InitQueue(stuQueue); printf("构建队列\n"); for(i=0;i<t;i++) { enQueue(stuQueue,student[i]); } printf("队长:%d\n",QueueLength(stuQueue)); printf("输出队列:\n"); DispQueue(stuQueue); printf("*****************\n"); printf("队首出队:\n"); deQueue(stuQueue,st2); DispStu(st2); printf("输出出队后的队列:\n"); DispQueue(stuQueue); printf("队长:%d\n",QueueLength(stuQueue)); printf("入队一个元素:\n"); enQueue(stuQueue,st1); DispQueue(stuQueue); printf("队长:%d\n",QueueLength(stuQueue)); DestroyQueue(stuQueue); return 0; }
相关文章推荐
- 数据结构之顺序队列和链式队列常用的一些操作
- 数据结构之顺序队列的操作(C语言)
- 数据结构之顺序队列的操作(C语言)
- 数据结构顺序栈的各种操作
- 【数据结构】——顺序循环队列的相关操作
- 数据结构(1)--线性表顺序表的主要操作的实现
- 数据结构实验1-顺序表-各种操作
- 进击的数据结构之六队列的基本操作-顺序结构
- 数据结构之顺序队列的优化
- 【数据结构】——链式队列操作
- 【数据结构】顺序表的基本操作
- 数据结构之静态循环队列(所有操作)
- 数据结构基础之数组实现线性表各种操作(二)
- 数据结构整理(一) —— 链表的各种操作
- 【数据结构】顺序栈的基本操作操作---C/C++
- 数据结构之顺序队列
- 数据结构之链表队列基本操作
- 数据结构之队列的顺序实现
- 数据结构图的各种操作
- 【数据结构】顺序栈的基本操作