C语言数据结构代码练习day11
顺序队列优化
如果将队列全部存满,队列为空和为满时,队头指针和队尾指针指向同一处。定义int size,当队头指针和队尾指针相同时,size!=0队满,size==0时队空。
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode{ //定义栈数据结构
int data[10]; //栈数据
int front=0;
int rear=0; //队头、队尾初始化指向data[0]
int size=0;
}SqQueue;
/*入队*/
bool EnQueue(SqQueue &Q,int x){
if(Q.rear==Q.front&&Q.size!=0)
return false; //队满
Q.data[Q.rear]=x;
Q.rear=(Q.rear+1)%10;
Q.size++;
return true; //入队成功
}
/*出队*/
bool DeQueue(SqQueue &Q,int &x){
if(Q.rear==Q.front&&Q.size==0)
return false; //队空
x=Q.data[Q.front];
Q.front=(Q.front+1)%10;
Q.size--;
return true; //出队成功
}
链式队列
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode{ //定义栈数据结构
int data; //结点数据
struct LNode *Next; //链指针
}LNode;
typedef struct{ //定义队列
LNode *front,*rear; //队头指针、队尾指针
}LinkQueue;
/*带头结点的队列初始化*/
void InitQueue(LinkQueue &Q){
Q.front=Q.rear=(LNode *)malloc(sizeof(LNode));
Q.front->Next=NULL; //队空
}
/*带头结点入队*/
void EnQueue(LinkQueue &Q,int x){
LNode *s=(LNode*)malloc(sizeof(LNode));
s->data=x;
s->Next=NULL;
Q.rear->Next=s;
Q.rear=s;
}
/*出队*/
bool DeQueue(LinkQueue &Q,int &x){
if(Q.front==Q.rear)
return false; //队空
LNode*p=Q.front->Next;
x=p->data;
Q.front->Next=p->Next;
if(Q.rear==p)
Q.rear=Q.front;
free(p);
return true;
}