数据结构C/C++队列算法
来源:互联网 发布:钢结构三维建模软件 编辑:程序博客网 时间:2024/05/29 14:02
假设以带头结点的循环链表来表示队列,并且只设一个指针指向队尾,编写相应的置队空、入队、出队算法。并且还要设计直观的用户操作界面,能直观看到操作结果。
#include <iostream>
#include <malloc.h>#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
using namespace std;
typedef int Datatype;
typedef struct Node//指针结构体
{
Datatype data;
struct Node* next;
}Node;
typedef struct//头指针和尾指针结构体
{
struct Node *front;
struct Node *rear;
}QNode,*LinkQueue;
void InitQueue( LinkQueue &Q);//初始化置空队列
void EnQueue( LinkQueue &Q, Datatype x);//入队
Datatype DeQueue( LinkQueue &Q,Datatype &x);//出队
void ShowAllData(LinkQueue &Q);//显示队列所有元素
int main()
{
LinkQueue Q;
Datatype x;
int choice;
printf("请输入你的选项:\n");
printf("1.初始化队列\n");
printf("2.置队空\n");
printf("3.入队\n");
printf("4.出队\n");
printf("其他键:退出\n");
while(~scanf("%d",&choice))//循环,使一直输入“choice"
{
if(choice==1){InitQueue(Q);printf("初始化成功,按任意键继续\n");}
else if (choice==2){InitQueue(Q);printf("队列置空成功,按任意键继续\n");}
else if (choice==3){printf("请输入插入的元素:");scanf("%d",&x);EnQueue(Q,x);}
else if (choice==4){DeQueue(Q,x);printf("出队的元素为%d\n",x);}
else exit(0);
printf("队列元素为:");
ShowAllData(Q);//显示全部元素
getchar();
system("cls");
printf("请输入你的选项:\n");
printf("1.初始化队列\n");
printf("2.置队空\n");
printf("3.入队\n");
printf("4.出队\n");
printf("其他键:退出\n");
}
return 0;
}
void InitQueue( LinkQueue &Q )//初始化队列
{
Q = new QNode;//申请队列空间
Q->rear = Q->front = new Node;//申请指针空间并使头尾指针地址相同
Q->front->next = NULL;//令队列内无元素
getchar();
return;
}
void EnQueue( LinkQueue &Q, Datatype x)//尾插法入队,将x存储在Q链表的尾部
{
Node* p = new Node; //申请新结点
p->data=x; //将x存入p中的数据域
Q->rear->next=p;//令Q的尾节点下一位指向p
Q->rear=p;//将尾指针移至新结点
Q->rear->next = Q->front;//循环队列,使尾节点下一位指向头结点
return;//完成入队
}
int DeQueue( LinkQueue &Q,Datatype &x)//出队操作,将在最前面的元素出队
{
if(Q->front == Q->rear)return 0;
Node* p=Q->front->next;//将Q的队列头元素地址赋给p
//p 指向将要摘下的结点
x=p->data; //保存结点中数据
Q->front->next = p->next;//令p的下一节点指向第一个元素
if (p==Q->rear)//如果队列为空
{
Q->rear = Q->front;//当队列中只有一个结点时,p 结点出队后, 要将队尾指针指向头结点
}
delete p;//释放被删结点
return 1;
}
void ShowAllData(LinkQueue &Q)//显示所有元素
{
if(Q->front->next == NULL)//如果队列中无元素
{
printf("无元素");
return;
}
Node* p=Q->front->next;//令p指针指向第一个元素
while(p!=Q->front)//当p遍历所有结点时
{
printf("%d ",p->data);//输出队列中所有元素
p = p->next;//p指向下一元素
}
getchar();
return;
}
阅读全文
0 0
- 数据结构C/C++队列算法
- 数据结构与算法(C#)--栈和队列
- c/c++常用算法(4) -- 数据结构(队列)
- 链式队列(数据结构C#)
- 数据结构---队列(C#)
- 数据结构(C#):队列
- C 队列之数据结构
- C数据结构实现队列
- 数据结构-队列(C语言版)
- 《数据结构(C语言版)》- 队列
- (c#)数据结构与算法分析 --栈与队列
- 数据结构与算法设计---链式队列的实现(C++)
- C源码@数据结构与算法->队列(queue)
- 数据结构与算法(C语言版)__队列
- 数据结构与算法(C语言版)__链式队列
- 《算法与数据结构---C语言描述》优先队列
- 算法与数据结构-队列的基本操作C语言实现
- C语言数据结构之-队列
- ARM TrustZone技术简介(一)
- 24.Oracle深度学习笔记——使用存储提纲
- 数据分析方法论
- 关于我们C语言的操作符。。
- Jessica's Reading Problem
- 数据结构C/C++队列算法
- Git 命令汇总
- oracle计算两个日期的时间差时分秒
- wampmanager安装后的配置
- Vue.component使用注意事项
- CodeForces
- hihoCoder1378最大流最小割定理
- 设计模式之适配器模式
- Linux下编译Android ffmpeg库