c之队列相关操作------初始化,入队,出队,队列清空,销毁,遍历
来源:互联网 发布:怎样查到淘宝卖家电话 编辑:程序博客网 时间:2024/04/29 19:44
#include <stdio.h>
#include <stdlib.h>
typedef struct QNode{ ///节点类型
int data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct { ///节点指针封装,队列两头的指针
QueuePtr front;
QueuePtr rear;
}LinkQueue; ///定义一个结构体,里面的指针是指向节点的指针
//定义一个空队列
void InitQueue(LinkQueue &Q){
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!(Q.front)){
printf("error");
}
Q.front->next=NULL;
printf("定义成功\n");
}
//队列的初始化
void chushihua(LinkQueue &Q){
printf("\t写入栈的值\n");
QueuePtr p; //为什么建立的不是一个节点,而是一个指向节点的指针呢
int e;
printf("\t请输入元素:(以-1结束)\n");
scanf("%d",&e);
while(e!=-1){
p=(QueuePtr)malloc(sizeof(QNode));
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
scanf("%d",&e);
}
QueuePtr q = Q.front->next;
while(q!=NULL)
{
printf("\t%d",q->data);
q = q->next;
}
printf("\n");
}
//元素入队
void EnQueue(LinkQueue &Q,int e){
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p)
printf("error\n");
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
}
//元素出队
void DeQueue(LinkQueue &Q,int e){
QueuePtr p;
if(!(Q.front==Q.rear)){//判断是不是空队列
p=Q.front->next;//记录队列中的第二个
e=p->data;
Q.front->next=p->next;
if(Q.rear==p){
Q.rear=Q.front;
}
}
free(p);
}
//遍历全部队列
void Travertal(LinkQueue &Q){
QueuePtr p;
p=Q.front; ///理清楚p和front的关系?????????????????????????????????????
if(p==Q.rear)
printf("\t空队列,没有可以出队的元素。\n");
while(!(p==Q.rear)){
printf("\t%d",p->next->data);
p=p->next;
}
printf("\t遍历完毕\n");
}
//队列销毁
void DisQueue(LinkQueue &Q){
while(Q.front){
Q.rear=Q.front->next;
free(Q.front);
Q.front=Q.rear;
}
Q.front=Q.rear=NULL;
}
int main()
{
LinkQueue Q;
int data;
int deletedata=0; ///一个指向节点的指针结构体
int choice;
printf("定义一个队列;\n");
InitQueue(Q);
printf("***************************\n");
printf("1.队列初始化\n2.元素入队\n3.元素出队\n4.遍历整个队列\n5.队列置空\n6.销毁队列\n");
printf("请输入您的选择:\n");
printf("***************************\n");
scanf("%d",&choice);
while(choice!=0){
switch(choice){
case 1://初始化队列
printf("**1.队列的初始化:\n");
chushihua(Q);
break;
case 2://元素入队
printf("**2.元素入队\n:");
printf("\t请输入入队的元素的值:");
scanf("%d",&data);
EnQueue(Q,data);
printf(" \t输出入队后的队列:\n");
Travertal(Q);
break;
case 3://元素出队
printf("**3.元素出队:\n");
DeQueue(Q,deletedata);
printf(" \t输出出队后的队列:\n");
Travertal(Q);
break;
case 4://遍历整个队列
printf("**4.遍历队列:\n");
Travertal(Q);
break;
case 5://队列置空
printf("**5.队列置空:\n");
while(Q.front!=Q.rear){
DeQueue(Q,deletedata);
}
break;
case 6://销毁队列
printf("**6.销毁队列:\n");
DisQueue(Q);
printf("\t如果还想再次使用队列,请在下一步骤中输入7。\n\t反之,输入0结束程序。");
break;
case 7://队列再次初始化
printf("**7.队列初始化\n");
InitQueue(Q);
break;
}
printf("请输入下一个选择:\n");
scanf("%d",&choice);
}
if(choice==0)
printf("\n程序结束,谢谢使用\n");
return 0;
}
#include <stdlib.h>
typedef struct QNode{ ///节点类型
int data;
struct QNode *next;
}QNode,*QueuePtr;
typedef struct { ///节点指针封装,队列两头的指针
QueuePtr front;
QueuePtr rear;
}LinkQueue; ///定义一个结构体,里面的指针是指向节点的指针
//定义一个空队列
void InitQueue(LinkQueue &Q){
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!(Q.front)){
printf("error");
}
Q.front->next=NULL;
printf("定义成功\n");
}
//队列的初始化
void chushihua(LinkQueue &Q){
printf("\t写入栈的值\n");
QueuePtr p; //为什么建立的不是一个节点,而是一个指向节点的指针呢
int e;
printf("\t请输入元素:(以-1结束)\n");
scanf("%d",&e);
while(e!=-1){
p=(QueuePtr)malloc(sizeof(QNode));
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
scanf("%d",&e);
}
QueuePtr q = Q.front->next;
while(q!=NULL)
{
printf("\t%d",q->data);
q = q->next;
}
printf("\n");
}
//元素入队
void EnQueue(LinkQueue &Q,int e){
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p)
printf("error\n");
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
}
//元素出队
void DeQueue(LinkQueue &Q,int e){
QueuePtr p;
if(!(Q.front==Q.rear)){//判断是不是空队列
p=Q.front->next;//记录队列中的第二个
e=p->data;
Q.front->next=p->next;
if(Q.rear==p){
Q.rear=Q.front;
}
}
free(p);
}
//遍历全部队列
void Travertal(LinkQueue &Q){
QueuePtr p;
p=Q.front; ///理清楚p和front的关系?????????????????????????????????????
if(p==Q.rear)
printf("\t空队列,没有可以出队的元素。\n");
while(!(p==Q.rear)){
printf("\t%d",p->next->data);
p=p->next;
}
printf("\t遍历完毕\n");
}
//队列销毁
void DisQueue(LinkQueue &Q){
while(Q.front){
Q.rear=Q.front->next;
free(Q.front);
Q.front=Q.rear;
}
Q.front=Q.rear=NULL;
}
int main()
{
LinkQueue Q;
int data;
int deletedata=0; ///一个指向节点的指针结构体
int choice;
printf("定义一个队列;\n");
InitQueue(Q);
printf("***************************\n");
printf("1.队列初始化\n2.元素入队\n3.元素出队\n4.遍历整个队列\n5.队列置空\n6.销毁队列\n");
printf("请输入您的选择:\n");
printf("***************************\n");
scanf("%d",&choice);
while(choice!=0){
switch(choice){
case 1://初始化队列
printf("**1.队列的初始化:\n");
chushihua(Q);
break;
case 2://元素入队
printf("**2.元素入队\n:");
printf("\t请输入入队的元素的值:");
scanf("%d",&data);
EnQueue(Q,data);
printf(" \t输出入队后的队列:\n");
Travertal(Q);
break;
case 3://元素出队
printf("**3.元素出队:\n");
DeQueue(Q,deletedata);
printf(" \t输出出队后的队列:\n");
Travertal(Q);
break;
case 4://遍历整个队列
printf("**4.遍历队列:\n");
Travertal(Q);
break;
case 5://队列置空
printf("**5.队列置空:\n");
while(Q.front!=Q.rear){
DeQueue(Q,deletedata);
}
break;
case 6://销毁队列
printf("**6.销毁队列:\n");
DisQueue(Q);
printf("\t如果还想再次使用队列,请在下一步骤中输入7。\n\t反之,输入0结束程序。");
break;
case 7://队列再次初始化
printf("**7.队列初始化\n");
InitQueue(Q);
break;
}
printf("请输入下一个选择:\n");
scanf("%d",&choice);
}
if(choice==0)
printf("\n程序结束,谢谢使用\n");
return 0;
}
0 0
- c之队列相关操作------初始化,入队,出队,队列清空,销毁,遍历
- 队列:出队、入队、销毁、清空等
- 顺序循环队列基本操作(入队,出队,清空,销毁,历遍)
- 链队列的初始化,入队,出队,计算队的长度,遍历链队销毁队列
- C语言实现循环队列基本操作(初始化、判断队空、入队、出队)
- 循环队列的操作(初始化,入队,出对,销毁,输出)
- 链式队列操作,初始化,入队,出队
- 顺序队列初始化/入队/出队列/判断队空
- 链队列和循环队列的表示与实现-初始化、判空、求长、入队、出队、遍历、求头、求尾、清队、毁队
- 链队列的建立、判空、入队、出队、求长、访头、清空和销毁
- 链队列的建立、判空、入队、出队、求长、访头、清空和销毁
- 链队列的建立、判空、入队、出队、求长、访头、清空和销毁
- c语言数据结构中循环队列操作,包括初始化,创建,清空销毁,增添,删除,求队长,遍历等等
- 循环顺序队列(初始化、入队、出队、判空)
- 队列操作--出队入队
- 关于队列的相关操作(初始化,判断队满队空,以及入队出队)
- 队列之出队入队
- 链队列的初始化、入队、出队等操作实现
- iOS应用开发17——导航栏的那些事
- Path Sum II
- 第9周项目3-输出星号图(补图e、f)
- setMask()与实现不规则形状的窗口
- docker 的安装
- c之队列相关操作------初始化,入队,出队,队列清空,销毁,遍历
- PHP性能分析工具和mysql慢查询分析工具
- 网络流汇总
- windows mobile 6.5 修改DPI以后导致makeimg出错
- X220 安装Mac
- 类声明和类实现
- 卡牌,技能
- 第九周项目二-分数的累加
- 设置QLineEdit无边框