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, ...
随机推荐
- 解决win10隔几分钟自动黑屏睡眠的方法
来源:win10总是很快自动休眠怎么解决? - 风格不空格的回答 - 知乎 https://www.zhihu.com/question/39263412/answer/87430653 1.运行注册 ...
- 启动jar的方式
1.windows server 2008 start "srvRegistry" java -jar srvRegistry-1.0-SNAPSHOT.jar --spring. ...
- HBase · 印象
2018-12-20 关键词: HBase是什么 . 什么是HBase . HBase基本概念 本篇文章系本人根据目前所掌握的知识对 HBase 的基本概念作出的一篇轻简式科普文章.关于文章所述的知识 ...
- [WC2007]剪刀石头布(最大流)
洛古 一句话题意:给定一张图,每两点之间有一条有向边或无向边,把所有无向边定向,使图中三元环个数尽量多 因为原图是一个完全图,假设图中任意三点都能构成三元环,那么途中三元环的个数为:\(\binom{ ...
- Angular6封装http请求
最近抽空学习了一下Angular6,之前主要使用的是vue,所以免不了的也想对Angular6提供的工具进行一些封装,今天主要就跟大家讲一下这个http模块. 之前使用的ajax库是axios,可以设 ...
- 微信获取企业token流程
1.获取服务商Accesstoken(每10分钟企业微信会推送一次,两个小时后过期) 2.根据suitid.accesstoken.第三方企业corpid.第三方企业permanentcode,得到第 ...
- centos7安装notepadqq
这是在centos7 上发表的第一篇博文 对linux系统陌生,折腾了一天,安装好了搜狗输入法.相关文章也不少,但照着一步一步来,都没有成功.最后照着这篇弄成了: ****** 安装notepadd+ ...
- 函数语法:currentStyle、getComputedStyle兼容判断
var oDiv = document.getElementById('aa'); if(oDiv.currentStyle){ var style = oDiv.currentStyle; aler ...
- 程序通过ReportViewer对象来调用reporting services并导出pdf文件
ReportViewer tempReportViewer = new ReportViewer(); tempReportViewer.ProcessingMode = ProcessingMode ...
- idea远程tomcat运行项目
记录一下idea远程tomcat运行项目的配置过程 背景:每次系统修改代码后则需手动打包手动部署到测试服务器上,为了简化这个过程我这里选择尝试一次idea的远程运行功能,结论来讲这玩意配置麻烦,并不算 ...