#include<stdio.h>
#include<stdlib.h>
typedef struct LinkNode//链式队列节点
{
int data;//数据域
struct LinkNode *next;//指针域
}LinkNode;
typedef struct//链式队列
{
LinkNode *front, *rear;//队列的队头指针和队尾指针
}LinkQueue;
void InitQueue(LinkQueue &Q)//初始化
{
Q.front = Q.rear = (LinkNode*)malloc(sizeof(LinkNode));
Q.front->next = NULL;//让队头指针指向空指针
}
bool EnQueue(LinkQueue &Q)//入队
{
char a;
printf("是否进行入队操作(Y/N):");
getchar();
scanf("%c", &a);
if (a == 'N')
{
printf("入队失败\n");
return false;
}
int b;
printf("请输入要入队的元素个数:");
scanf("%d", &b);
for (int i = 0; i < b;i++)//用循环进行多次入队操作
{
int x;
printf("请输入要入队的元素(一次输入一个数字):");
scanf("%d", &x);
LinkNode *s = (LinkNode*)malloc(sizeof(LinkNode));//用malloc函数申请空间给新的节点s
if (s == NULL)
{
printf("入队失败\n");
return false;
}
s->data = x;//把输入的数放进新节点
s->next = NULL;//让新节点指向空指针
Q.rear->next = s;//新节点插入到rear后
Q.rear = s;//修改表尾指针
printf("入队成功,入队的元素是:%d\n", x);
}
return true;
}
bool DeQueue(LinkQueue &Q)//出队
{
char a;
printf("是否进行出队操作(Y/N):");
getchar();
scanf("%c", &a);
if (a == 'N')
{
printf("出队失败\n");
return false;
}
if (Q.rear == Q.front)//判断是否空队
return false;
LinkNode *p = Q.front->next;//新建一个指针指向出队元素所在的那个节点
int x = p->data;//把队首元素的值放入x中
printf("出队的元素是:%d\n", x);
Q.front->next = p->next;//修改头节点的next指针
if (Q.rear == p)//此次是最后一个节点出队
Q.rear = Q.front;//修改rear指针
free(p);//释放指针p指向的元素所在的节点空间
return true;
}
bool FrontQueue(LinkQueue &Q)//取队首元素
{
if (Q.rear == Q.front)
{
printf("空队,无队头元素\n");
return false;
}
printf("队头元素是:%d\n", Q.front->next->data);//打印队头指针指向的下一个节点的元素值
return true;
}
bool EmptQueue(LinkQueue &Q)//判空
{
if (Q.rear == Q.front)
{
printf("空队列\n");
return true;
}
else
printf("不是空队列\n");
return false;
}
bool Print(LinkQueue &Q)//输出队列元素
{
if (Q.front == Q.rear)//判空
{
printf("队列为空\n");
return false;
}
LinkNode *p = Q.front->next;//新建一个指针指向队首元素所在的节点
printf("队列的元素是:");
while (1)
{
printf("%d ", p->data);
if (p == Q.rear)//判断p是否指向队尾节点
{
printf("\n");
return true;
}
p = p->next;//节点p指向下一个节点
}
}
bool DeleQueue(LinkQueue &Q)//销毁队列
{
char a;
printf("是否销毁队列(Y/N):");
getchar();
scanf("%c", &a);
if (a == 'N')
{
printf("队列销毁失败\n");
return false;
}
LinkNode *p, *q;//新建两个指针
p = Q.front;//指针p指向头节点
while (p != NULL)//当头结点的指针域不为0,即不是链尾时
{
q = p->next;//让q指向头结点的后续结点
free(p);//把p指针指向的节点空间释放了,但是p指针还存在。
p = q;//让p和q都指向后续结点,此时p和q指针指向的都是下一个节点,接下来重复这一段的操作就好了。
}
Q.rear = Q.front;//让队头指针和队尾指针都指向头节点
printf("队列销毁成功\n");
return true;
}
int main()
{
LinkQueue Q;
InitQueue(Q);//初始化
EnQueue(Q);//入队
FrontQueue(Q);//取队头元素
Print(Q);//输出队列所有元素
DeQueue(Q);//出队
Print(Q);//输出队列所有元素
EmptQueue(Q);//判空
DeleQueue(Q);//销毁队列
Print(Q);//输出队列所有元素
return 0;
}
没有合适的资源?快使用搜索试试~ 我知道了~
栈和队列.zip
共101个文件
tlog:24个
ipch:9个
pdb:8个
需积分: 5 0 下载量 73 浏览量
2022-11-10
12:53:36
上传
评论
收藏 37.54MB ZIP 举报
温馨提示
栈和队列.zip
资源推荐
资源详情
资源评论
收起资源包目录
栈和队列.zip (101个子文件)
2.1 链式栈.cpp 7KB
2.2.2.cpp 4KB
2.1.cpp 4KB
2.2.1.cpp 3KB
Browse.VC.db 15.65MB
Browse.VC.db 15.62MB
Browse.VC.db 15.62MB
Browse.VC.db 1.88MB
2.1 链式栈.exe 45KB
2.2.1.exe 43KB
2.2.2.exe 43KB
2.1.exe 42KB
2.1 链式栈.vcxproj.filters 975B
2.2.1.vcxproj.filters 967B
2.2.2.vcxproj.filters 967B
2.1.vcxproj.filters 965B
vc142.idb 395KB
vc142.idb 291KB
vc142.idb 35KB
vc142.idb 35KB
2.2.1.ilk 422KB
2.2.2.ilk 402KB
2.1 链式栈.ilk 399KB
2.1.ilk 384KB
2.1.ipch 34.5MB
2.1.ipch 33.75MB
2.1 链式栈.ipch 3.69MB
2.1 链式栈.ipch 3.69MB
2.1.ipch 3.63MB
2.1 链式栈.ipch 3.63MB
2.1.ipch 3.06MB
2.2.1.ipch 3.06MB
2.2.2.ipch 3.06MB
2.2.1.lastbuildstate 210B
2.2.2.lastbuildstate 210B
2.1.lastbuildstate 205B
2.1 链式栈.lastbuildstate 182B
2.2.2.log 1KB
2.1.log 942B
2.1 链式栈.log 939B
2.2.1.log 928B
2.1 链式栈.obj 32KB
2.2.2.obj 23KB
2.2.1.obj 23KB
2.1.obj 22KB
2.1.pdb 1.96MB
2.1 链式栈.pdb 1.13MB
2.2.1.pdb 956KB
2.2.2.pdb 940KB
vc142.pdb 476KB
vc142.pdb 148KB
vc142.pdb 84KB
vc142.pdb 84KB
2.2.1.exe.recipe 337B
2.2.2.exe.recipe 337B
2.1.exe.recipe 330B
2.1 链式栈.exe.recipe 317B
2.1 链式栈.sln 1KB
2.1.sln 1KB
2.2.1.sln 1KB
2.2.2.sln 1KB
.suo 37KB
.suo 34KB
.suo 28KB
.suo 28KB
CL.read.1.tlog 7KB
link.read.1.tlog 6KB
link.command.1.tlog 5KB
CL.command.1.tlog 3KB
link.read.1.tlog 3KB
link.command.1.tlog 2KB
link.read.1.tlog 2KB
link.read.1.tlog 2KB
CL.read.1.tlog 2KB
CL.read.1.tlog 2KB
CL.read.1.tlog 2KB
CL.command.1.tlog 2KB
link.command.1.tlog 1KB
link.command.1.tlog 1KB
CL.write.1.tlog 1KB
link.write.1.tlog 1KB
CL.command.1.tlog 800B
CL.command.1.tlog 800B
link.write.1.tlog 548B
link.write.1.tlog 548B
CL.write.1.tlog 536B
CL.write.1.tlog 536B
CL.write.1.tlog 536B
link.write.1.tlog 524B
链式队列.txt 4KB
顺序队列.txt 3KB
2.2.1.vcxproj.FileListAbsolute.txt 96B
2.2.2.vcxproj.FileListAbsolute.txt 96B
2.1.vcxproj.user 168B
2.2.1.vcxproj.user 168B
2.2.2.vcxproj.user 168B
2.1 链式栈.vcxproj.user 168B
2.1 链式栈.vcxproj 7KB
2.2.1.vcxproj 7KB
2.2.2.vcxproj 7KB
共 101 条
- 1
- 2
资源评论
Dz920
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功