学习日志

苏嵌项目实战学习日志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;
}

今日总结:队列有点难,链式存储较为复杂,还没有完全搞懂队列。
编写后总会出现错误,自身还有很多不足

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值