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, ...
随机推荐
- Hdoj 1425.sort 题解
Problem Description 给你n个整数,请按从大到小的顺序输出其中前m大的数. Input 每组测试数据有两行,第一行有两个数n,m(0<n,m<1000000),第二行包含 ...
- 【BZOJ5495】[十二省联考2019]异或粽子(主席树,贪心)
[BZOJ5495][十二省联考2019]异或粽子(主席树,贪心) 题面 BZOJ 洛谷 题解 这不是送分题吗... 转异或前缀和,构建可持久化\(Trie\). 然后拿一个堆维护每次的最大值,每次如 ...
- 扩展CRT +扩展LUCAS
再次感谢zyf2000超强的讲解. 扩展CRT其实就是爆推式子,然后一路合并,只是最后一个式子上我有点小疑惑,但整体还算好理解. #include<iostream> #include&l ...
- npm后台启动nuxt服务之 kill
后台启动 npm run start & ps aux | grep start 根据项目对应的id执行如下命令 kill xxxx
- [物理学与PDEs]第3章习题1 只有一个非零分量的磁场
设磁场 ${\bf H}$ 只有一个非零分量, 试证明 $$\bex ({\bf H}\cdot\n){\bf H}={\bf 0}. \eex$$ 证明: 不妨设 ${\bf H}=(0,0,H_3 ...
- 使用SIGALARM为connect设置超时
static void connect_alarm(int); int connect_timeo(int sockfd, const SA *saptr, socklen_t salen, int ...
- APPLE-SA-2019-3-25-5 iTunes 12.9.4 for Windows
APPLE-SA-2019-3-25-5 iTunes 12.9.4 for Windows iTunes 12.9.4 for Windows is now available and addres ...
- java处理含有中文的字符串.
1. 问题描述: 原始数据是以行为单位的, 每行固定长度931个字节, 汉字占2个字节, 按照字典描述,共有96个字典,只有第32个字典为中文地址, 所以需要单独处理. 由于项目设计保密,故删除敏感数 ...
- 模组 前后端分离CURD 组件
js (function () { // {# -------------------------------------------------------------------------- # ...
- 编程入门视频【 Python、PHP、ThinkPHP、Laravel、Mysql、微信小程序】
免费分享 Python.PHP.ThinkPHP.Laravel.Mysql.微信小程序等学习视频 点击进入搜刮 免费分享 Python.PHP.ThinkPHP.Laravel.Mysql.微信小程 ...