苏嵌日志3
姓名:王倩 日期:2018 9.12
今日学习任务: 队列的学习
今日任务完成情况: 分别用顺序存储方式和链式存储方式编写了队列的代码。
今日开发中出现的问题汇总:
链式存储队列出队、清空队列、销毁队列的代码还不懂
今日未解决问题: 程序运行出错,
今日开发收获:了解了队列,以及用顺序存储、链式存储编写队列的程序
自我评价: 写代码速度还要提高,可以跟着老师一起编码
其他 :老师说的挺好的
队列结构
特点:先进先出
队头front(取出数据) 队尾rear(存放数据)
进队:操作队尾 出队:操作对头
类型:顺序存储 链式存储
队列的顺序存储用 循环队列
空队:队头 队尾重合
队尾指针指向最后一个元素的后一个
队列容量:最大值减一
循环队列长度:(rear - front + MAXSIZE)% MAXSIZE
判断队列是否已满:(rear + 1) % MAXSIZE == front“
main.c
#include <stdio.h>
#include "queue.h"
nt main()
queue;//定义队列
int ret,i;
ret=InitQueue(&queue);//初始化队列
if(ret==SUCCESS)
{
printf("Init Success!\n");
}
else
{
printf("Init Failure!\n");
}
//进队/
for(i=0;i<10;i++)
{
ret=EnterQueue(&queue,i+1);
if(ret==FAILURE)
{
printf("Enter Failure!\n");
}
else
{
printf("Enter %d Success!\n",i+1);
}
}
///////////////////
//////出队//////
for(i=0;i<5;i++)
{
ret=DelQueue(&queue);
if(ret==FAILURE)
{
printf("Delete Failure!\n");
}
else
{
printf("Delete %d Success!\n",ret);
}
}
//////////////////////////////////////
//////队列长度/////////////////////////////////////////////////////////////
ret=LengthQueue(queue);
printf("length is %d\n",ret);
////////////////////////////////////////////////////////////////////////////
//////////清空队列/////////////////////////////////////////////////////////
ret=ClearQueue(&queue);
if(ret==SUCCESS)
{
printf("Clear Success!\n");
}
else
{
printf("Clear Failure!\n");
}
///////////////////////////////////////////////////////////////////////////
////////销毁队列////////////////////////////////////////////////////////////
ret=DestroyQueue(&queue);
if(ret==SUCCESS)
{
printf("Destroy Success!\n");
}
else
{
printf("Destroy Success!\n");
}
//////////////////////////////////////////////////
queue.c
#include "queue.h"
#include <stdlib.h>
#include <stdio.h>
/////队列初始化///////////////////////////////////////////////////////////////////////////////////////////////
int InitQueue(Q *q)
{
if(q==NULL)//入参判断
{
return FAILURE;
}
//申请一块 内存,并让data指向该空间
q->data=(int *)malloc(sizeof(int) * MAXSIZE);
if(NULL==q->data)//返回值判断 (如果申请失败)
{
return FAILURE;
}
q->rear=q->front=0;//队头队尾指针指向同一个
return SUCCESS;
}
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//进队//
int EnterQueue(Q *q,int e)
{
if(q==NULL)//入参判断
{
return FAILURE;
}
if((q->rear+1)%MAXSIZE==q->front)//队满
{
return FAILURE;
}
q->data[q->rear]=e;
q->rear=(q->rear+1)%MAXSIZE;
return SUCCESS;
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////出队/////////////////////////////////////////////////////////////////////////////////////////////////////
int DelQueue(Q *q)
{
if(q==NULL)//入参判断
{
return FAILURE;
}
if(q->rear==q->front)//判断是否为空队
{
return FAILURE;
}
int e=q->data[q->front];
q->front=(q->front+1)%MAXSIZE;
return e;
}
////////////////////////////////////////////////////////////////////////////
/////////队列长度///////////////////////////////////////////////////////////
int LengthQueue(Q q)
{
return (q.rear-q.front+MAXSIZE)%MAXSIZE;
}
////////////////////////////////////////////////////////////////////////////
////////////////清空队列////////////////////////////////////////////////////
int ClearQueue(Q *q)
{
if(q==NULL)
{
return FAILURE;
}
q->rear = q->front;
return SUCCESS;
}
////////////////////////////////////////////////////////////////////
//////销毁队列/////////////////////////////////////////////////////////////
int DestroyQueue(Q *q)
{
if(NULL==q)//入参判断
{
return FAILURE;
}
free(q->data);//释放空间
return SUCCESS;
}
/////////////////////////////////////////////////////
queue.h
#ifndef QUEUE_H
#define QUEUE_H
#define MAXSIZE 10 //队列容量
#define SUCCESS 1000
#define FAILURE 1001
struct queue
{
int *data;//指向队列的存储空间
int front;//队头指针
int rear;//队尾指针
};
typedef struct queue Q;
int InitQueue(Q *q);//初始化
int EnterQueue(Q *q,int e);//进队
int DelQueue(Q *q);//出队
int LengthQueue(Q q);//队列长度
#ifndef QUEUE_H
#define QUEUE_H
#define MAXSIZE 10 //队列容量
#define SUCCESS 1000
#define FAILURE 1001
struct queue
{
int *data;//指向队列的存储空间
int front;//队头指针
int rear;//队尾指针
};
typedef struct queue Q;
int InitQueue(Q *q);//初始化
int EnterQueue(Q *q,int e);//进队
int DelQueue(Q *q);//出队
int LengthQueue(Q q);//队列长度
int ClearQueue(Q *q);//清空队列
int DestroyQueue(Q *q);//销毁队列
#endif