苏嵌日志3
姓名:王心成 日期:2018 9.12
今日学习任务: 队列的学习
今日任务完成情况: 分别用顺序存储方式和链式存储方式编写了队列的代码。
今日开发中出现的问题汇总:
链式存储队列出队、清空队列、销毁队列的代码还不懂
今日未解决问题: 程序运行出错,
今日开发收获:了解了队列,以及用顺序存储、链式存储编写队列的程序
自我评价: 写代码速度还要提高,可以跟着老师一起编码
队列结构
特点:先进先出
队头front(取出数据) 队尾rear(存放数据)
进队:操作队尾 出队:操作对头
类型:顺序存储 链式存储
队列的顺序存储用 循环队列
空队:队头 队尾重合
队尾指针指向最后一个元素的后一个
队列容量:最大值减一
循环队列长度:(rear - front + MAXSIZE)% MAXSIZE
判断队列是否已满:(rear + 1) % MAXSIZE == front“
include”queue.h”
include”stdio.h”
int main()
{
int ret,i;
Q *queue;
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 ==SUCCESS)
{
printf("Enter %d Success!\n",i+1);
}
else
{
printf("Enter Failure!\n");
}
}
for (i=0;i<6;i++)
{
ret = DeleteQueue(queue);
if(ret == FAILURE)
{
printf("Delete Failure!\n");
}
else
{
printf("Delete %d Success!\n",ret);
}
}
ret = LengthQueue(queue);
printf("length is %d\n",ret);
return 0;
}
include “queue.h”
include “stdlib.h”
int InitQueue(Q **q)
{
if(NULL==q) //入参判断
{
return FAILURE;
}
(q)=(Q )malloc(sizeof(Q)); //给队列信息申请空间
if(NULL==(*q))
{
return FAILURE;
}
Node *p=(Node*)malloc(sizeof(Node)); //头结点申请空间
if(NULL==p)
{
return FAILURE;
}
(*q)->front =(*q)->rear=p; //队头指针 对尾指针都指向头结点
return SUCCESS;
}
int EnterQueue(Q *q, int e)
{
if(NULL==q)
{
return FAILURE;
}
Node *p =(Node *)malloc(sizeof(Node));
if(NULL==p)
{
return FAILURE;
}
p->next =NULL;
p->data =e;
q->rear->next =p;
q->rear=p;
return SUCCESS;
}
int DeleteQueue(Q *q)
{
if(NULL==q)
{
return FAILURE;
}
if(q->rear ==q->front)
{ return FAILURE;}
Node *p =q->front->next;
int e = p->data;
q->front->next=p->next;
free(p);
if(q->rear==p)
{
q->rear=q->front;
}
return e;
}
int LengthQueue(Q *q)
{
if(NULL== q)
{
return FAILURE;
}
int length=0;
Node *p= q->front ->next;
while (p)
{
length++;
}
ifndef QUEUE_H
define QUEUE_H
define SUCCESS 1000
define FAILURE 1001
struct mode //结点的信息
{
int data; //数据域
struct mode *next; //指针域
};
typedef struct mode Node;
struct queue //队列的信息
{
Node *front; //队头指针
Node *rear; //队尾指针
};
typedef struct queue Q;
int InitQueue(Q **q);
int EnterQueue