苏嵌项目实战学习日志3
姓名:高奇
日期:2018/09/05
今日任务
学习队列,以及队列的顺序存储还有链式存储
今日代码
顺序存储
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 EmptyQueue(Q q);
int EnterQueue(Q *q,int e);
int LengthQueue(Q q);
int GetFront(Q q);
int DelQueue(Q *q);
int ClearQueue(Q *q);
int DestoryQueue(Q *q);
#endif
queue.c:
#include "queue.h"
#include <stdlib.h>
int InitQueue(Q *q)
{
if (NULL == q) //入参判断
{
return FAILURE;
}
q->data = (int *)malloc(sizeof(int) * MAXSIZE); //申请内存空间
if (NULL == q->data)
{
return FAILURE;
}
q->front = q->rear = 0;
return SUCCESS;
}
int EmptyQueue(Q q)
{
return ((q.front== q.rear) ? SUCCESS:FAILURE);
}
int EnterQueue(Q *q,int e)
{
if(NULL == q) //入参判断
{
return 0;
}
if((q->rear + 1) % MAXSIZE == q->front) //队满
{
return FAILURE;
}
q->data[q->rear] = e;
q->rear =(q->rear + 1)% MAXSIZE;
return SUCCESS;
}
int LengthQueue(Q q)
{
int len;
len = (q.rear - q.front +MAXSIZE) %MAXSIZE;
return len;
}
int GetFront(Q q)
{
if(q.front == q. rear)
{
return FAILURE;
}
return q.data[q.front];
}
int DelQueue(Q *q)
{
if(NULL == q) //入参判断
{
return FAILURE;
}
if(q->rear == q->front) //空队
{
return FAILURE;
}
int e = q->data[q->front];
q->front = (q->front + 1) % MAXSIZE;
return e;
}
int ClearQueue(Q *q)
{
if(NULL == q) //入参判断
{
return FAILURE;
}
// 头指针和尾指针指向相同位置
q->rear = q->front;
return SUCCESS;
}
int DestoryQueue(Q *q)
{
if(NULL == q) //入参判断
{
return FAILURE;
}
free(q->data);
//释放空间
return SUCCESS;
main.c:
#include <stdio.h>
#include "queue.h"
#include <stdlib.h>
int main()
{
Q queue;
int ret,i;
ret = InitQueue(&queue); //初始化队列
if(ret == FAILURE) //返回值判断
{
printf("Init Failure!\n");
exit(1);
}
else if (ret == SUCCESS)
{
printf("Init Success!\n");
}
ret = EmptyQueue(queue); //判断队列是否为空
if (ret == SUCCESS)
{
printf("queue is empty\n");
}
else if (ret == FAILURE)
{
printf("queue is not empty\n");
}
for(i = 0;i < 10; i++)
{
//进队操作
ret = EnterQueue(&queue, i+1);
if(ret == FAILURE)
{
printf("enter failure!\n");
}
else if(ret == SUCCESS)
{
printf("enter %d success!\n",i+1);
}
}
int length = LengthQueue(queue);
printf("length is %d\n",length);
//获取队头元素
ret = GetFront(queue);
if(ret == FAILURE)
{
printf("get front failure\n");
}
else
{
printf("front is %d",ret);
}
for(i = 0;i <10;i++)
{
ret = DelQueue(&queue);
if(ret == FAILURE)
{
printf("Del Failure!\n");
}
else
{
printf("Del Success!\n",ret);
}
}
int length1 = LengthQueue(queue);
printf("length is %d\n",length1);
ret = GetFront(queue);
if(ret == FAILURE)
{
printf("get front failure\n");
}
else
{
printf("front is %d",ret);
}
//清空队列
ret = ClearQueue(&queue);
if (ret == SUCCESS)
{
printf("Clear Success!\n");
}
else
{
printf("front FAILURE!\n",ret);
}
ret = GetFront(queue);
if(ret == FAILURE)
{
printf("get front failure\n");
}
else
{
printf("front is %d",ret);
}
ret = DestoryQueue(&queue);
if(ret == FAILURE)
{
printf("Destory Failure!\n");
}
else
{
printf("Destory Success!\n");
}
return 0;
}
今日总结:队列有点难,链式存储较为复杂,还没有完全搞懂队列。
编写后总会出现错误,自身还有很多不足