1.顺序队列
Que_Opeartor.c
#include "stdio.h"
#include "stdlib.h"
#include "stdbool.h"
#include "string.h"
#define MAXSIZE 5
typedef bool status;
struct Que
{
int que[MAXSIZE];
int front;//指向队头
int rear;//指向队尾
};
//创建队列
struct Que *Que_Create()
{
struct Que*q=(struct Que *)malloc(sizeof(struct Que));
if(q==NULL)
{
return false;
}
memset(q->que,0,sizeof(q->que));
q->front=q->rear=MAXSIZE-1;
return q;
}
//判断队列是否已满
status Que_Is_Full(struct Que *q)
{
//if(q->front==MAXSIZE-1)
//{
// return true;
//}
if(q->rear==-1)
{
return true;
}
return false;
}
//判断队列是否为空
status Que_Is_Empty(struct Que *q)
{
if(q->front==q->rear)
{
return true;
}
return false;
}
//遍历队列
status Que_Travel(struct Que *q)
{
if(Que_Is_Empty(q))
{
printf("队列为空,遍历失败!\n");
return false;
}
for(int i=q->rear+1;i<MAXSIZE;i++)
{
printf("队列中的数据:%d\n",q->que[i]);
}
return true;
}
//入队
status Que_Push(struct Que *q,int data)
{
if(Que_Is_Full(q))
{
printf("队列已满,入队失败!\n");
return false;
}
//理解,只要有数据入队,就让队头指针指向最后一个数据元素
//即队列如下
//我们将数据从右侧开始放,即将对头指向右侧,开始时队尾也指向右侧
//随着数据的加入队尾逐渐左翼
//—— —— —— —— —— ——
q->que[q->rear]=data;
q->rear--;
return true;
}
//出队
status Que_Pop(struct Que *q,int *data)
{
if(Que_Is_Empty(q))
{
printf("队列为空,出队失败!\n");
return false;
}
*data=q->que[q->front];
q->que[q->front]=0;
int i=q->front;
while(i!=q->rear)
{
q->que[i]=q->que[i-1];
i--;
}
q->rear++;
return true;
}
int main()
{
struct Que *que1=Que_Create();
Que_Push(que1,10);
Que_Push(que1,20);
Que_Push(que1,30);
Que_Push(que1,40);
Que_Travel(que1);
printf("*********************\n");
int data;
Que_Pop(que1,&data);
printf("出队的数据:%d\n",data);
Que_Travel(que1);
printf("\n*********************\n");
Que_Push(que1,80);
Que_Travel(que1);
return 0;
}
#include "stdio.h"
#include "stdbool.h"
#include "stdlib.h"
typedef bool status;
struct Que
{
int data;
struct Que *next;
};
struct Que_Point
{
struct Que *front;
struct Que *rear;
};
struct Que_Point *Que_Create()
{
struct Que_Point *que_point=(struct Que_Point*)malloc(sizeof(struct Que_Point));
if(que_point==NULL)
{
return NULL;
}
que_point->front=que_point->rear=(struct Que *)malloc(sizeof(struct Que));
if(que_point->front==NULL)
{
return NULL;
}
que_point->front->data=0;
que_point->front->next=NULL;
return que_point;
}
//入队
status Que_Push(struct Que_Point *q,int data)
{
struct Que *new_Node=(struct Que *)malloc(sizeof(struct Que));
if(new_Node==NULL)
{
return false;
}
new_Node->data=data;
q->rear->next=new_Node;
new_Node->next=NULL;
q->rear=new_Node;
return true;
}
//出队
status Que_Pop(struct Que_Point *q,int *data)
{
if(q->front==q->rear)
{
printf("队列为空,出队失败!\n");
return false;
}
struct Que *temp=q->front->next;
if(temp->next==NULL)
{
q->rear=q->front;
q->front->next=NULL;
*data=temp->data;
free(temp);
return true;
}
q->front->next=temp->next;
temp->next=NULL;
*data=temp->data;
free(temp);
return true;
}
//遍历
status Que_Travel(struct Que_Point *q)
{
if(q->front==q->rear)
{
printf("队列为空,遍历失败!\n");
return false;
}
struct Que *tra=q->front;
while(tra->next)
{
tra=tra->next;
printf("数据:%d\n",tra->data);
}
return true;
}
int main()
{
struct Que_Point*que=Que_Create();
//入队
Que_Push(que,10);
Que_Push(que,20);
Que_Push(que,30);
Que_Push(que,40);
Que_Travel(que);
//出队
int data;
Que_Pop(que,&data);
printf("出队的数据:%d\n",data);
Que_Travel(que);
return 0;
}
#include "stdio.h"
#include "stdbool.h"
#include "stdlib.h"
typedef bool status;
struct Que
{
int data;
struct Que *next;
};
struct Que_Point
{
struct Que *front;
struct Que *rear;
};
struct Que_Point *Que_Create()
{
struct Que_Point *que_point=(struct Que_Point*)malloc(sizeof(struct Que_Point));
if(que_point==NULL)
{
return NULL;
}
que_point->front=que_point->rear=(struct Que *)malloc(sizeof(struct Que));
if(que_point->front==NULL)
{
return NULL;
}
que_point->front->data=0;
que_point->front->next=NULL;
return que_point;
}
//入队
status Que_Push(struct Que_Point *q,int data)
{
struct Que *new_Node=(struct Que *)malloc(sizeof(struct Que));
if(new_Node==NULL)
{
return false;
}
new_Node->data=data;
q->rear->next=new_Node;
new_Node->next=NULL;
q->rear=new_Node;
return true;
}
//出队
status Que_Pop(struct Que_Point *q,int *data)
{
if(q->front==q->rear)
{
printf("队列为空,出队失败!\n");
return false;
}
struct Que *temp=q->front->next;
if(temp->next==NULL)
{
q->rear=q->front;
q->front->next=NULL;
*data=temp->data;
free(temp);
return true;
}
q->front->next=temp->next;
temp->next=NULL;
*data=temp->data;
free(temp);
return true;
}
//遍历
status Que_Travel(struct Que_Point *q)
{
if(q->front==q->rear)
{
printf("队列为空,遍历失败!\n");
return false;
}
struct Que *tra=q->front;
while(tra->next)
{
tra=tra->next;
printf("数据:%d\n",tra->data);
}
return true;
}
int main()
{
struct Que_Point*que=Que_Create();
//入队
Que_Push(que,10);
Que_Push(que,20);
Que_Push(que,30);
Que_Push(que,40);
Que_Travel(que);
//出队
int data;
Que_Pop(que,&data);
printf("出队的数据:%d\n",data);
Que_Travel(que);
return 0;
}