C语言实现队列(数组)

这是实现顺序队列

使用字符数组实现

#include<stdio.h>
#include<malloc.h>

#define MaxSize 100   //MaxSize 这个常量代表100
typedef char ElemType; //用ElemType来代替char,相当于给
//char重新起一个名字,功能一样,只不过看起来更难度,正规一些
typedef struct{
    
    
	ElemType data[MaxSize];
	int front,rear;
}Queue;
//在这里定义了一个结构体,queue里面有两个内容一个是字符数组
//另外有两个int 的变量,分别记录头和尾

//创建队列
void Init(Queue *&q){
    
    
	q=(Queue *)malloc(sizeof(Queue));
	q->front=q->rear=-1;
}
void Destroy(Queue *&q){
    
    
	free(q);
}
//判断是否为空
bool IsEmpty(Queue *&q){
    
    
	return q->front==q->rear;
}
//入队
bool  AddQueue(Queue *q,ElemType e)
{
    
    
	if(q->rear==MaxSize-1)
		return false;
	q->rear++;
	q->data[q->rear]=e;
	return true;
}
//出队
bool DelQueue(Queue *&q,ElemType &e)
{
    
    
	if(q->front==q->rear)
		return false;
		q->front++;
		e=q->data[q->front];
		return true;
}
int main()
{
    
    
	return 0;
}

使用链表来实现队列

#include<stdio.h>
#include<malloc.h>
typedef char ElemType;
typedef struct qnode{
    
    
	ElemType data;
	struct qnode *next;
}QNode;
typedef struct{
    
    
	QNode *front;
	QNode *rear;
}Queue;
void Init(Queue *&q){
    
    
	q=(Queue *)malloc(sizeof(Queue));
	q->front=q->rear=NULL;
}
void Destroy(Queue *&q){
    
    
	QNode *p=q->front,*r;
	if(p!=NULL)
	{
    
    
		r=p->next;
		while(r!=NULL)
		{
    
    
			free(p);
			p=r;
			r=p->next;
		}
	}
	free(p);
	free(q);
}
bool IsEmpty(Queue *q){
    
    
	return q->rear==NULL;
}
void AddQueue(Queue *&q,ElemType e){
    
    
	QNode *p;
	p=(QNode *)malloc(sizeof(QNode));
	p->data=e;
	p->next=NULL;
	if (q->rear==NULL)		//若链队为空,则新节点是队首节点又是队尾节点
		q->front=q->rear=p;
	else
	{
    
    	q->rear->next=p;	//将*p节点链到队尾,并将rear指向它
		q->rear=p;
	 }
}
bool deQueue(LiQueue *&q,ElemType &e)
{
    
    	QNode *t;
	if (q->rear==NULL)		//队列为空
		return false;
	t=q->front;				//t指向第一个数据节点
	if (q->front==q->rear)  //队列中只有一个节点时
		q->front=q->rear=NULL;
	else					//队列中有多个节点时
		q->front=q->front->next;
	e=t->data;
	free(t);
	return true;
}

猜你喜欢

转载自blog.csdn.net/weixin_45079974/article/details/107420913