佟奇 写于:2018.9.12
今日学习任务
复习栈和队列的相关知识点,队列的顺序是先进先出,学习顺序存储和链式存储
今日任务完成情况
队列 先进先出 {顺序 连式存储}
队头:取出数据
队尾:存放数据
1、对列的顺序存储:循环队列
2、空队 就是队头队尾重合
3、对尾指针,指向最后一个元素的后一个(容量为7,则实际存储为6)
4、循环队列长度:rear-front
5、循环队列长度:(rear-front+MAXSIZE)% MAXSIZE,当对尾在队头前面
6、判断队列是否满:( rear+1 )%MAXSIZE = front
对于链式与顺序存储有了初步的了解。
今日开发中出现的问题汇总
了解队列是从队尾存放数据,队头取出数据。
空队:对头队尾重合 队尾指针:指向最后一个元素的后一个(n-1)
循环队列的长度:(rear –front +MAXSIZE)%MAXSIZE
如:7%5 取整=1; 5%7取余=5;取整=0;
判断栈是否满:(rear+1)%MAXSIZE=front
注意:
在queue.c中所写的如下程序的头文件必须在queue.h中加上且必须加分号(;)
main .c 程序
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;
queue.c 程序
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)
{
queue.h 程序
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 EnterQueu