/*
分为带头结点与不带头结点,与单链表类似 ,再单独定义队头队尾指针即可
*/
#include<stdio.h>
#include<stdlib.h>
typedef struct linknode{
int data;
struct linknode *next;
}LinkNode;
typedef struct{
LinkNode *rear,*front;
}LinkQuere;
/*
节点初始化
*/
bool InitLinkNode(LinkNode* &l){
l = (LinkNode*)malloc(sizeof(LinkNode));
if(l != NULL){
return false;
}
l->next = NULL;
return true;
}
/*
判断队是否为空
*/
bool Empty(LinkQuere q){
if(q.front == q.rear){
return true;
}
else
return false;
}
/*
带头结点初始化
*/
void InitLinkQuere(LinkQuere &LQ){
LQ.front = LQ.rear = (LinkNode*)malloc(sizeof(LinkNode));
LQ.front->next = NULL;
}
/*
不带头结点的初始化
*/
void NoHeadInitLinkQuere(LinkQuere &q){
q.rear = NULL;
q.front = NULL;
}
/*
带头节点入队操作
*/
void InsertLinkQuere(LinkQuere &lq,int data){
LinkNode *l;
InitLinkNode(l);
l->data = data;
lq.rear->next = l;
lq.rear = l;
}
/*
不带头节点入队操作
*/
void Noheadinsert(LinkQuere &lq,int data){
LinkNode *l;
InitLinkNode(l);
l->data = data;
if(lq.front == NULL){
lq.front = l;
lq.rear = l;
}else{
lq.rear->next = l;
lq.rear = l;
}
}
/*
出队带头节点
*/
bool DeLinkQuere(LinkQuere &lq,int &x){
if(Empty(lq)){
return false;
}
LinkNode *p;
InitLinkNode(p);
p = lq.front->next;
x = p->data;
lq.front->next = p->next;
if(lq.rear == p){
lq.front = lq.rear;
}
free(p);
return true;
}
/*
出队不带头节点
*/
bool NoHeadDe(LinkQuere &lq,int &x){
LinkNode *l;
// InitLinkNode(l);
if(lq.front == NULL){
return false;
}
l = lq.front;
x = l->data;
lq.front = l->next;
if(lq.rear == l){
lq.front = NULL;
lq.rear = NULL;
}
free(l);
return true;
}
int main(){
LinkQuere q;
int x;
// InitLinkQuere(q);
NoHeadInitLinkQuere(q);
// InsertLinkQuere(q,1);
// InsertLinkQuere(q,2);
Noheadinsert(q,1);
Noheadinsert(q,2);
// DeLinkQuere(q,x);
// printf("%d\n",x);
// DeLinkQuere(q,x);
// printf("%d\n",x);
NoHeadDe(q,x);
printf("%d\n",x);
NoHeadDe(q,x);
printf("%d\n",x);
}
数据结构--链式队列的基本操作
最新推荐文章于 2025-03-24 22:34:05 发布