单链队列实现及基本操作

   

 

#include<iostream>
using namespace std;

typedef struct LinkQueueNode//队列节点结构                                          

{
 int data;
 LinkQueueNode *next;
}LQN,*LQNP;

typedef struct LinkQueue//链队列结构
{
 LQNP front;//头结点指针(注意不是指向队头节点)
 LQNP rear;//队尾节点指针
}LQ;

LQ CreateLinkQueue()//创建空队列
{
 LQ Q;
 Q.front=Q.rear=new LQN;//创建头结点
 if(!Q.front)
  cout<<"存储分配失败!"<<endl;
 Q.front->next=NULL;
 return Q;
}

LQ EnterQueue(LQ Q,int n)//元素n入队列
{
 LQN *ptn;
 ptn=new LQN;
 ptn->next=NULL;
 ptn->data=n;
 Q.rear->next=ptn;
 Q.rear=ptn;
 return Q;
}

LQ OutQueue(LQ Q)//队头元素出队列
{
 LQN *q;
 q=Q.front->next;
 Q.front->next=q->next;
 delete q;
 return Q;
}

int QueueLength(LQ Q)
{
 int len=0;
 LQN *p;
 p=Q.front->next;
 while(p)
 {
  len++;
  p=p->next;
 }
 return len;
}

void PrintQueue(LQ Q)
{
 LQN *p;
 p=Q.front->next;
 while(p!=Q.rear)
 {
  cout<<p->data<<"-->";
  p=p->next;
 }
 cout<<p->data<<endl;
}

LQ EmptyQueue(LQ Q)
{
 LQN *q,*p;
 Q.rear=Q.front;
 p=Q.front->next;
 while(p)
 {
  q=p;
  p=p->next;
     delete q;
  q=NULL;
 }
 return Q;
}

void DestroyQueue(LQ Q)
{
 EmptyQueue(Q);
 Q.rear=NULL;
 delete Q.front;
}

int main()
{
 LQ Q;
 int choice,n;
 Q=CreateLinkQueue();
 if(Q.front)
  cout<<"空队列创建成功!"<<endl;
 while(1)
 {
 system("pause");
 system("cls");
 cout<<"1.元素入队列"<<endl;
 cout<<"2.队头元素出队列"<<endl;
 cout<<"3.打印队列元素"<<endl;
 cout<<"4.清空队列"<<endl;
 cout<<"0.退出程序"<<endl;
 cout<<"请选择操作:";
 cin>>choice;
 switch(choice)
 {
 case 1:cout<<"输入入队列元素:";cin>>n;
  Q=EnterQueue(Q,n);cout<<"元素成功入队列!"<<endl;break;
 case 2:Q=OutQueue(Q);cout<<"队头元素已出队列!"<<endl;break;
 case 3:cout<<"队列为:";PrintQueue(Q);break;
 case 4:Q=EmptyQueue(Q);if(Q.front==Q.rear)cout<<"队列已清空!"<<endl;break;
 case 0:DestroyQueue(Q);exit(0);
 }
 }
 return 0;
}

若有不足欢迎指正;若有疑问鄙人也乐于解答,欢迎留言或QQ加群!

欢迎加入QQ群:735472015,群内有VC,MFC,win32API,批处理,python学习资料干货喔?

若您觉得对您有帮助,不妨点个赞?呗!


 
 

 

转载于:https://www.cnblogs.com/lyj-blogs/p/LinkQueueOflyj.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
链队列实现可以使用C语言中的链表来实现,具体实现如下: ``` #include <stdio.h> #include <stdlib.h> // 定义队列结构体 typedef struct QueueNode { int data; struct QueueNode* next; } QueueNode; // 定义队列 typedef struct { QueueNode* front; // 队头指针 QueueNode* rear; // 队尾指针 } Queue; // 初始化队列 void initQueue(Queue* queue) { queue->front = NULL; queue->rear = NULL; } // 判断队列是否为空 int isQueueEmpty(Queue* queue) { return queue->front == NULL; } // 入队 void enqueue(Queue* queue, int data) { QueueNode* node = (QueueNode*)malloc(sizeof(QueueNode)); node->data = data; node->next = NULL; if (queue->rear == NULL) { queue->front = node; queue->rear = node; } else { queue->rear->next = node; queue->rear = node; } } // 出队 int dequeue(Queue* queue) { if (isQueueEmpty(queue)) { printf("Error: Queue is empty.\n"); exit(1); } int data = queue->front->data; QueueNode* temp = queue->front; queue->front = queue->front->next; if (queue->front == NULL) { queue->rear = NULL; } free(temp); return data; } // 打印队列 void printQueue(Queue* queue) { printf("Queue: "); QueueNode* node = queue->front; while (node != NULL) { printf("%d ", node->data); node = node->next; } printf("\n"); } // 测试队列 int main() { Queue queue; initQueue(&queue); enqueue(&queue, 1); enqueue(&queue, 2); enqueue(&queue, 3); printQueue(&queue); dequeue(&queue); printQueue(&queue); dequeue(&queue); printQueue(&queue); dequeue(&queue); printQueue(&queue); dequeue(&queue); // Error: Queue is empty. return 0; } ``` 上述代码实现链队列基本操作,包括初始化队列、判断队列是否为空、入队、出队、打印队列等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值