c_数据结构_队的实现
# 链式存储
#include<stdio.h>
#include<stdlib.h>
#define STACK_INIT_SIZE 100//存储空间初始分配量
#define STACKINCREMENT 10//存储空间分配增量
#define TURE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define OVERFLOW -2 typedef struct QNode{
int data;
struct QNode *next;
}QNode,*QueuePtr; typedef struct{
QueuePtr front; //队头指针
QueuePtr rear; //队尾指针
}LinkQueue;
//批量存入数据
int create(LinkQueue &Q){
int i,n;
QNode *p;
printf("请输入需要存入的元素个数:");
scanf("%d",&n);
while(n<=){
printf("\n元素个数小于了“1”,请重新输入元素个数:");
scanf("%d",&n);
}
printf("请输入元素:\n");
for(i=n;i>;--i)
{
p=(QueuePtr)malloc(sizeof(QNode));
scanf("%d",&p->data);
Q.rear->next=p; //尾指针后移
Q.rear=p; //放入元素
}
p->next=NULL;
return OK;
} //构建空队
int InitQueue_Q(LinkQueue &Q){
Q.front=Q.rear=(QueuePtr)malloc(sizeof(QNode));
if(!Q.front)
{
printf("存储空间分配失败!!");
exit(OVERFLOW);
}
Q.front->next=NULL;
return OK;
} //打印队列中的元素
int pr(LinkQueue &Q,int e)
{
QueuePtr p;
p=Q.front->next;
if(Q.front==Q.rear) return ERROR;
printf("\n队列中的元素为:\n");
while(p)
{
printf("%d\n",p->data);
p=p->next;
}
return OK;
} int GetHead_Q(LinkQueue &Q,int &e){ if(Q.rear==Q.front)return ERROR;
QueuePtr p;
p=Q.front->next; //将原队列的头结点赋值给p
e=p->data;
printf("队头元素为:%d\n",e);
return OK;
} //队尾插入元素
int EnQueue_Q(LinkQueue &Q,int &e){
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p){ //存储分配失败
printf("存储空间分配失败!!!\n");
exit(OVERFLOW);
}
printf("请输入插入元素:");
scanf("%d",&e);
p->data=e; //e赋值给p指向的空间
p->next=NULL; //p指向NULL
Q.rear->next=p;
Q.rear=p; //将p赋给Q
return OK;
}
// 删除队列头元素
int DeQueue_Q(LinkQueue &Q,int &e){
QNode *P;
if(Q.front==Q.rear) return ERROR;
P=Q.front->next ;
e=P->data;
Q.front ->next =P->next; //将原对头的后继p->next赋值给头结点后继
if(Q.rear ==P) //当队列中只有一个元素时,q->rear指向头结点
Q.rear =Q.front;
free(P);
printf("删除的元素为:%d",e);
return OK;
}
// 销毁队列
int dest(LinkQueue &Q){
while(Q.front){
Q.rear=Q.front->next;
free(Q.front);
Q.front=Q.rear;
}
InitQueue_Q(Q); //队销毁后,调用create()从新创建一个空队,因为初始化不在witch语句里
return OK;
} void OperateMenu(){
printf("\n\n--------------请选择元素处理方式---------\n\n");
printf("注:此程序为队的实现,故只能对序列尾进行元素的插入和删除\n\n");
printf("0> 退出程序\n\n");
printf("1> 批量存入数据\n\n");
printf("2> 获取队头元素\n\n");
printf("3> 队尾插入元素\n\n");
printf("4> 删除队头元素\n\n");
printf("5> 打印队列\n\n");
printf("6> 销毁队列\n\n");
printf("请选择对元素的处理:");
} void main()
{
LinkQueue Q; int w,e,k,boo=;
printf("注:此测试过程输入值应全为数字\n\n");
printf("请用户选择初始化队或退出程序:\n\n");
printf("队初始化请输入:'1'\n\n");
printf("退出请选择'0'或 其它!!\n\n");
printf("请选择:");
scanf("%d",&w);
if(w==){
if(InitQueue_Q(Q))
printf("\n构建空队成功!!");
else
printf("\n构建失败!!");
OperateMenu();
scanf("%d",&k);
while(k)
{
switch(k)
{ case :break;
case :boo=create(Q);
if(boo)
printf("\n存入成功!!\n");
else
printf("\n存入失败!!\n");
break;
case :boo=GetHead_Q(Q,e);
if(boo)
printf("\n获取成功!!\n");
else
printf("\n队为空,获取失败!!\n");
break;
case :boo=EnQueue_Q(Q,e);
if(boo)
printf("\n插入成功!!\n");
else
printf("\n插入失败!!\n");
break;
case :boo=DeQueue_Q(Q,e);
if(boo)
printf("\n删除成功!!\n");
else
printf("\n队为空,删除失败!!\n");
break;
case :boo=pr(Q,e);
if(boo)
printf("\n打印成功!!\n");
else
printf("\n队为空,打印失败!!\n");
break;
case :boo=dest(Q);
if(boo)
printf("\n 销毁成功!!\n");
else
printf("\n销毁失败!!\n");
}
OperateMenu();
scanf("%d",&k);
}
}
// return OK;
}
c_数据结构_队的实现的更多相关文章
- C_数据结构_循环队列
# include <stdio.h> # include <malloc.h> typedef struct Queue { int * pBase; int front; ...
- c_数据结构_图_邻接表
课程设计------邻接表 图的遍历实现课程设计:https://files.cnblogs.com/files/Vera-y/图的遍历_课程设计.zip #include<stdio.h> ...
- c_ 数据结构_图_邻接矩阵
程序主要实现了图的深度遍历和广度遍历. #include <stdio.h> #include <stdlib.h> #include <string.h> #de ...
- C_数据结构_链表的链式实现
传统的链表不能实现数据和链表的分离,一旦数据改变则链表就不能用了,就要重新开发. 如上说示:外层是Teacher,里面小的是node. #ifndef _MYLINKLIST_H_ #define _ ...
- c_数据结构_栈的实现
#include<stdio.h> #include<stdlib.h> #define STACK_INIT_SIZE 100 #define STACKINCREMENT ...
- c_数据结构_链表
#include<stdio.h> #include<stdlib.h> #define ERROR 0 #define OK 1 #define OVERFLOW -2 ty ...
- c_数据结构_顺序表
#define OK 1 #define ERROR 0 #define OVERFLOW -2 #define LIST_INIT_SIZE 100 // 线性表存储空间的初始分配量 #define ...
- C_数据结构_走迷宫
#include <stdio.h> #include <conio.h> #include <windows.h> #include <time.h> ...
- C_数据结构_快速排序
# include <stdio.h> void QuickSort(int * a, int low, int high); int FindPos(int * a, int low, ...
随机推荐
- hdu-5786(补图最短路)
题意:给你n个点,m条无向边,问你这n个点构成的完全图,不用那m条边,由一个s出现的单源最短路 解题思路:首先,暴力建图不行,点太多,那么我们就按照它的规则来,把m条边建好,但是建的这个图表示不走的方 ...
- 清北学堂part2
今天的内容分为两部分,能听懂的和听不懂的... 整一整当前阶段(oi)非常重要的知识点,扩展欧几里得, 其他的不是不重要,只是代码实现效果不很好 代码: #include<bits/stdc++ ...
- java基础1之引用数据类型
5种引用类型(对象类型) 类 接口 数组 枚举 标注 类 类在JVM的内存空间的存储 (1). Heap 堆空间:分配对象 new Student() 存放引用数据类型的实例 (2). Stack 栈 ...
- centos7.4 linux 指令
1.查看版本 lsb_release -a 2.查看mysql路径 whereis mysql 3.查看编码 locale 修改语言编码 经过在网上查找资料发现,Centos 7已经不采用/etc/s ...
- [AMD驱动]解决AMD驱动的1603错误
官方:https://www.amd.com/en/support/kb/faq/gpu-kb1603 其实把更改的文档 下载 音乐等默认目录恢复到C盘(或任意一个可访问的路径),就可以正常安装了.
- BZOJ3456城市规划
题目描述 刚刚解决完电力网络的问题, 阿狸又被领导的任务给难住了.刚才说过, 阿狸的国家有n个城市, 现在国家需要在某些城市对之间建立一些贸易路线, 使得整个国家的任意两个城市都直接或间接的连通.为了 ...
- Mac spotlight无法搜索的解决方法
出现问题: 1. 在打开spotlight快速搜索的时候输入两个字符,后该搜索框自动会消失,很是奇怪重启等操作也没有效果 问题原因: 可能因为之前因为耗电原因关闭的全局搜索的索引,或者由于索引出现错误 ...
- 关于Oracle.ManagedDataAccess数据库表加字段后,必须重启的问题
关于Oracle.ManagedDataAccess数据库表加字段后,必须重启的问题,解决方法如下:在数据库连接字串中,增加一个参数:Metadata Pooling=false如“Data Sour ...
- 题解-洛谷P1303 A*B Problem(高精)
https://www.luogu.org/problemnew/show/P1303(题目传送门) 看到数据范围,显然要用高精度算法(乘法). 首先用字符串读下这最多达10^2000的数,并判断符号 ...
- Java Web之Cookie、Session
讲Cookie和Seesion之前,先讲一下HTTP连接其实是无序的,服务器不知道是谁在访问它.现在我们来实现一个简单的邮箱功能. 要求: 1.登录页面登录之后看到收件箱和欢迎我 2.点击收件箱看到几 ...