姓名:刘星辰
今日学习任务
学习了解数据结构中队列的结构;队列中顺序存储结构及链式存储结构的功能函数代码编写
今日任务完成情况
本日任务按计划完成,今日开发代码量:约500行
今日开发中出现的问题汇总
①顺序存储队列功能函数中进队、出队的代码实现功能的流程还存在一些不太清楚;
②链式存储队列功能函数,何时需要释放结点,还不太明确。
今日未解决问题 无
今日开发收获
①清楚了数据结构中队列数据额结构模型;
②了解了队列的特点和属性;
③了解并完成了关于顺序队列的简单功能函数代码编写;
④了解并完成了关于链式队列的简单功能函数代码编写。
⑤熟悉了图形界面进入文本编辑器进行代码编写操作的流程。
自我评价
按开发规定完成了既定任务,今天相比昨天会主动在老师讲解之前进行一些代码功能的编写
队列结构(两个端口):先进先出
类型:顺序存储(连续)、链式存储(不连续)
循环队列(顺序存储)
空队:队头队尾重合
队尾指针:指向最后一个元素的后一个(指针下标为MAXSIZE - 1)
循环队列的长度:
(rear – front + MAXSIZE)% MAXSIZE
判断队列是否满:
(rear + 1)% MAXSIZE == front;
用代码表示一个队列:
struct queue
{
int *data;
int front;
int rear;
};
vim 单词补齐快捷键Ctrl+N
顺序存储队列功能函数:
★队列初始化:front、rear同指向0,申请内存并让data指针指向这块空间。
★进队操作:①进队判断,如果队满,无法进队。
②操作队尾,放入数据
q->data[q->rear]=e
q->rear=(q->rear+1)%MAXSIZE
★出队操作:①出队判断,如果空队,无法出队。
②操作队头,移出数据
int e=q->data[q->front]
q->front=(q->front+1)%MAXSIZE
★求队列长度:
(q.rear – q.front + MAXSIZE) % MAXSIZE;
★清除队列:
q->rear = q->front;
★释放队列:释放之前索要的空间,防止数据泄露。
free(q->data); q->data = NULL;
链式存储队列功能函数:
相比顺序存储队列,多一个节点信息(数据域、指针域)
★队列初始化:front、rear同指向头结点,申请头节点空间及队列信息空间。
★进队操作:不存在队满,有数据,就申请空间。新节点地址放进前一个指针域里。
q->rear->next = p;
q->rear = p;
★出队操作:①出队判断,如果空队,无法出队。
②操作对头指针
q->front->next = p->next;
free(p);
特:只剩一个节点的情况。
If (q-> == p)
{
q->rear = q->front;
}
★求队列长度:
Node *p = q ->front->next;
while (p)
{
length++;
p = p->next
}
★清除队列:释放节点后指向新的节点。最后要删完所有节点,队尾指针指向开头。
★判断队列是否为空:
(q->front == q->rear)? SUCCESS:FAILURE;
★销毁队列:释放头结点及队列信息;
free((*q->front); free(*q);