当前位置: 首页 > news >正文

链队列的基本操作(带头结点,不带头结点)

结构体

typedef struct linknode{int data;struct linknode* next;后继指针
}linknode;
typedef struct {linknode* front, * rear;//队头队尾指针
}linkquene;

初始化队列(带头结点)

int initquene(linkquene* q)//初始化队列
{q->front = q->rear = (linknode*)malloc(sizeof(linknode));q->front->next =NULL;
}

队列判空

int isempty(linkquene* q)//队列判空
{if (q->front == q->rear)return true;else return false;
}

进队操作

int enquene(linkquene* q, int x)//进队操作
{linknode* s = (linknode*)malloc(sizeof(lnode));s->data = x;s->next = NULL;q->rear->next = s;q->rear = s;
}

出队操作

int dequene(linkquene* q, int* x)//出队操作
{if (q->front == q->rear)return false;linknode* p = q->front->next;x = p->data;q->front->next = p->next;if (q->rear == p)q->rear = q->front;free(p);return true;
}

完整的测试代码

#include<stdio.h>
typedef struct linknode{int data;struct linknode* next;
}linknode;
typedef struct {linknode* front, * rear;
}linkquene;
int initquene(linkquene* q)//初始化队列
{q->front = q->rear = (linknode*)malloc(sizeof(linknode));q->front->next =NULL;
}
int isempty(linkquene* q)//队列判空
{if (q->front == q->rear)return true;else return false;
}
int enquene(linkquene* q, int x)//进队操作
{linknode* s = (linknode*)malloc(sizeof(linknode));s->data = x;s->next = NULL;q->rear->next = s;q->rear = s;
}int dequene(linkquene* q, int* x)//出队操作
{if (q->front == q->rear)return false;linknode* p = q->front->next;x = p->data;q->front->next = p->next;if (q->rear == p)q->rear = q->front;free(p);return true;
}
int main()
{linkquene q;initquene(&q);if (!isempty(&q)) //队列判空  printf("队列不为空\n");elseprintf("队列为空\n");int x = 0;printf("要进队的元素为:");scanf("%d", &x);if (enquene(&q, x)) //进队操作  printf("进队元素为%d\n", x);elseprintf("队列满,不能进队%d\n", x);if (dequene(&q, &x)) //出队操作  printf("出队元素为%d\n", x);elseprintf("队列为空,不能出队\n");printf("%d\n", x);
}

不带头结点初始化操作

int initquene(linkquene* q)//不带头结点的初始化队列
{q->front =NULL;q->next = NULL;
}

不带头结点队列判空

int isempty(linkquene* q)//不带头结点的队列判空
{if (q->front == NULL)return true;elsereturn false;
}

不带头结点进队操作

int enquene(linkquene* q, int x)//不带头结点进队操作
{linknode* s = (linknode*)malloc(sizeof(linknode));s->data = x;s->next = NULL;if(q->front==NULL)//在空队列中插入元素{q->front=s;//修改队尾指针q->rear=s;}else{q->rear->next=s;//新结点插入到rear结点之后q->rear=s; //修改rear指针}
}

不带头结点的出队操作

int dequene(linkquene* q, int* x)//不带头结点的出队操作
{if (q->front == NULL)return false;linknode* p = q->front;x = p->data;q->front = p->next;if (q->rear == p){q->front=NULL;q->rear =NULL;}free(p);return true;
}

不带头结点的完整测试代码

#include<stdio.h>
typedef struct linknode{int data;struct linknode* next;
}linknode;
typedef struct {linknode* front, * rear;
}linkquene;
int initquene(linkquene* q)//不带头结点的初始化队列
{q->front =NULL;q->rear = NULL;
}
int isempty(linkquene* q)//不带头结点的队列判空
{if (q->front == NULL)return true;elsereturn false;
}
int enquene(linkquene* q, int x)//不带头结点进队操作
{linknode* s = (linknode*)malloc(sizeof(linknode));s->data = x;s->next = NULL;if(q->front==NULL)//在空队列中插入元素{q->front=s;//修改队尾指针q->rear=s;}else{q->rear->next=s;//新结点插入到rear结点之后q->rear=s; //修改rear指针}
}
int dequene(linkquene* q, int* x)//不带头结点的出队操作
{if (q->front == NULL)return false;linknode* p = q->front;x = p->data;q->front = p->next;if (q->rear == p){q->front=NULL;q->rear =NULL;}free(p);return true;
}
int main()
{linkquene q;initquene(&q);if (!isempty(&q)) //队列判空  printf("队列不为空\n");elseprintf("队列为空\n");int x = 0;printf("要进队的元素为:");scanf("%d", &x);if (enquene(&q, x)) //进队操作  printf("进队元素为%d\n", x);elseprintf("队列满,不能进队%d\n", x);if (dequene(&q, &x)) //出队操作  printf("出队元素为%d\n", x);elseprintf("队列为空,不能出队\n");printf("%d\n", x);
}

http://www.lryc.cn/news/168974.html

相关文章:

  • 深入学习 Redis Cluster - 基于 Docker、DockerCompose 搭建 Redis 集群,处理故障、扩容方案
  • C现代方法(第3、4章)笔记
  • R语言绘制染色体变异位置分布图,RIdeogram包
  • Vue知识系列(7)每天10个小知识点
  • 5分钟就能实现的API监控,有什么理由不做呢?
  • Jmeter引入外部jar包以满足加密数据的Post请求
  • 了解冒泡排序
  • 群辉 Synology NAS Docker 安装 RustDesk-server 自建服务器只要一个容器
  • 为什么要有override
  • Linux界的老古董
  • 安卓逆向 - Xposed入门教程
  • 【嵌入式】2024届校招岗位汇总
  • Docker搭建ELK日志采集服务及Kibana可视化图表展示
  • SpringBoot结合MyBatis实现多数据源配置
  • 单个vue echarts页面
  • 【web开发】6、Django(1)
  • 第29节-PhotoShop基础课程-滤镜库
  • 空间(蓝桥杯)
  • 蓝桥杯2023年第十四届省赛真题-更小的数--题解
  • SpringBoot详解
  • typescript 类型断言
  • 如何确定自己是否适合做程序员?
  • LabVIEW以编程方式查找系统中DAQ设备的设备名称
  • 23、mysql数据库的安装
  • 【实战详解】如何快速搭建接口自动化测试框架?Python + Requests
  • Linux安全加固:保护你的服务器
  • 【C++初阶】C++STL详解(四)—— vector的模拟实现
  • VS code 下 makefile 【缺少分隔符 停下来】 报错解决方法
  • 虹科案例 | Zuellig Pharma和ELPRO通过符合GDP标准的温度监测和高效的温度数据管理为未来发展奠定基础
  • 为啥我的第二个for循环不加框红的代码就运行失效呢?(文末赠书)