今日学习任务:
今天学习了队列的顺序存储和链式存储。
今日任务完成情况:
与昨天的情况相比有了明显的改善,能较快的跟上老师讲课的节奏,但还是因为基础较差的原因,接受很慢。
#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 FAILURE;
}
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 DestroyQueue(Q * q)
{
if(NULL == q) //入参判断
{
return FAILURE;
}
free(q -> data); //释放空间
return SUCCESS;
}
#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 DestroyQueue(Q * q);
#endif
#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",i+1);
}
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\n",ret);
}
for(i=0;i<5;i++)
{
ret = DelQueue(&queue);
if(ret == FAILURE)
{
printf("Del Failure!\n");
}
else
{
printf("Del %d Success!\n",ret);
}
}
//获取代码
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\n",ret);
}
//清空队列
ret = ClearQueue(&queue);
if(ret == SUCCESS)
{
printf("Clear Success!\n");
}
else
{
printf("Clear Failure!\n");
}
//获取代码
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\n",ret);
}
ret = DestroyQueue(&queue);
if(ret == FAILURE)
{
printf("Destroy Failure!\n");
}
else
{
printf("Destroy Success!\n");
}
return 0;
}