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, ...
随机推荐
- Nginx ServerName指令
L:47
- spring中设计模式
MVC模式 Model:pojo.数据库交互(业务数据和业务逻辑) View:Jsp(与用户交互页面) Controller:控制器(接收请求并决定调用哪个模块组件去处理请求,然后决定调用哪个视图(通 ...
- 【XSY2962】作业 数学
题目描述 有一个递推式: \[ \begin{align} f_0&=1-\frac{1}{e}\\ f_n&=1-nf_{i-1} \end{align} \] 求 \(f_n\) ...
- React Native——react-navigation的使用
在 React Native 中,官方已经推荐使用 react-navigation 来实现各个界面的跳转和不同板块的切换. react-navigation 主要包括三个组件: StackNavig ...
- Codeforces Gym 101252D&&floyd判圈算法学习笔记
一句话题意:x0=1,xi+1=(Axi+xi%B)%C,如果x序列中存在最早的两个相同的元素,输出第二次出现的位置,若在2e7内无解则输出-1. 题解:都不到100天就AFO了才来学这floyd判圈 ...
- 从Socket入门到BIO,PIO,NIO,multiplexing,AIO(未完待续)
Socket入门 最简单的Server端读取Client端内容的demo public class Server { public static void main(String [] args) t ...
- 第八节:Task的各类Task<TResult>返回值以及通用线程的异常处理方案。
一. Task的各种返回值-Task<TResult> PS: 在前面章节,我们介绍了Task类开启线程.线程等待.线程延续的方式,但我们并没有关注这些方式的返回值,其实他们都是有返回值的 ...
- Centos7安装vsftpd (FTP服务器)
Centos7安装vsftpd (FTP服务器) 原文链接:https://www.jianshu.com/p/9abad055fff6 TyiMan 关注 2016.02.06 21:19* 字数 ...
- VSCode CSS自动补充前缀
1.安装AuotPrefixer. 2.代码里写css样式后,Ctrl+Shift+P,选择AutoPrefix CSS执行 结果如下
- How to avoid the 0-byte file on Webclient download error
_client.DownloadDataAsync(new Uri(url)); _client.DownloadDataCompleted += (sender, e) => { try { ...