#include<string.h> // 字符串函数头文件
#include<ctype.h> // 字符函数头文件
#include<malloc.h> // malloc()等
#include<limits.h> // INT_MAX等
#include<stdio.h> // 标准输入输出头文件
#include<stdlib.h> // atoi(),exit()
#include<io.h> // eof()
#include<math.h> // 数学函数头文件
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
typedef int Status; // Status是函数的类型,其值是函数结果状态代码
#define MAX_QSIZE 100 // 最大队列长度+1
#define N 10
typedef int QElemType;
typedef struct
{
char name[20];
char id[20];
int x;
int y;
int z;
}point;
typedef struct
{ point* base; // 初始化的动态分配存储空间
int front; // 头指针,若队列不空,指向队列头元素
int rear; // 尾指针,若队列不空,指向队列尾元素的下一个位置
}SqQueue;
void InitQueue(SqQueue &Q)
{ // 构造一个空队列Q
Q.base=(point *)malloc(MAX_QSIZE *sizeof(point));
if(!Q.base) // 存储分配失败
exit(OVERFLOW);
Q.front=Q.rear=0;
}
Status QueueEmpty(SqQueue Q)
{ // 若队列Q为空队列,则返回TRUE;否则返回FALSE
if(Q.front==Q.rear) // 队列空的标志
return TRUE;
else
return FALSE;
}
Status EnQueue(SqQueue &Q,point e)
{ // 插入元素e为队列Q的新的队尾元素
if((Q.rear+1)%MAX_QSIZE==Q.front) // 队列满
return ERROR;
Q.base[Q.rear]=e; // 将e插在队尾
Q.rear=(Q.rear+1)%MAX_QSIZE; // 队尾指针+1后对MAX_QSIZE取余
return OK;
}
int QueueLength(SqQueue Q)
{ // 返回队列Q的元素个数,即队列的长度
return(Q.rear-Q.front+MAX_QSIZE)%MAX_QSIZE;
}
DeQueue(SqQueue &Q,point &e)
{ // 若队列Q不空,则删除Q的队头元素,用e返回其值,并返回OK;否则返回ERROR
if(Q.front==Q.rear) // 队列空
return ERROR;
e=Q.base[Q.front]; // 将队头元素的值赋给e
Q.front=(Q.front+1)%MAX_QSIZE; // 移动队头指针
return OK;
}
void QueueTraverse(SqQueue Q,point e)
{ // 从队头到队尾依次对队列Q中每个元素输出
int i=Q.front; // i最初指向队头元素
while(i!=Q.rear) // i指向队列Q中的元素
e=Q.base[i];//把i指向的元素赋给e
{
printf("name:%s id=%s x=%d y=%d z=%d",e.name,e.id,e.x,e.y,e.z); // 输出i所指元素
i=(i+1)%MAX_QSIZE; // i指向下一个元素
}
printf("\n");
}
void main()
{
int i;
SqQueue Q;
InitQueue(Q);
point p[N];
point e;
for(i=1;i<=N;i++)
{
printf("Input the %dth point's name id x y z ",i);
scanf("%s %s %d %d %d",p[i].name,p[i].id,p[i].x,p[i].y,p[i].z);
EnQueue(Q,p[1]);
}
QueueTraverse(Q,e);
}
运行时如入数据后弹出对话框---应用程序错误,0xccccccc内存不能为written.
为什么会这样啊?怎么改?急求解……答得好加分!~
额……我也不知道是内存溢出还是什么……我是初学者……我急于知道哪里错了,怎么能改对……希望各位大侠帮帮忙~
数据结构顺序循环队列中取模(求余)问题,C语言
因为是循环队列 所以 完全有可能出现 队头在队尾后面的情况,即R<F 比如 一共10个元素 M=10 先入队9个元素,队头指向最后一个 即9 然后 出队5个元素,队尾指向5 再入队三个元素, 队头指向2 这是队内实际个数为(2-5+10)%10 = 7个 至于为什么要加上 是因为 当F=9 R=5的时候 (9...
...求一完整程序 !】编写实现该循环队列的入队和出队操作的算法。_百...
if (tail==top)printf("空队列");printf("\\n");printf("\\n1队列初始化\\n2入队操作\\n3出队操作\\n4输出队头元素\\n5判断队列是否为空\\n0退出\\n请输入代码:");scanf("%d",&n);} while (n!=0);}
请问,在严蔚敏《数据结构(C语言版)》中,不能用动态分配的一维数组来实...
可以的,不过在初始化时开辟的空间要是一定的。这和用数组定义一样。因为当空间满时不能用realloc来重新分配内存。我是这么理解的。如果错了的话请指点。
关于数据结构的问题,用C语言描述
一、数据结构的章节结构及重点构成数据结构学科的章节划分基本上为:概论,线性表,栈和队列,串,多维数组和广义表,树和二叉树,图,查找,内排,外排,文件,动态存储分配。对于绝大多数的学校而言,“外排,文件,动态存储分配”三章基本上是不考的,在大多数高校的计算机本科教学过程中,这三章也是基本上不作讲授的。所以,...
C语言版数据结构程序设计求大神帮助
struct { SElemType elem[MaxSize]; int front,rear; }SqQueue; \/* 队列 *\/ void InitQueue(SqQueue* pQ) \/* 初始化队列,开始时队列为空 *\/ { pQ->front=pQ->rear=0; } int EnQueue(SqQueue* pQ,SElemType e) \/* 进队 *\/ { if ((pQ->rear+1)%MaxSize == pQ->front)...
数据结构 c语言版问题何谓队列上溢现像?解决它有哪些方法,且分别简述其...
队列的上溢就是,队列中实际上还有位置可存储元素,但是指示位置的指针呢不能正确表示存放位置,指到了不能存放元素的位置,并且告诉系统,不能存了,这是与现实中队列运行不同的,上溢就是走一次,走到了存满元素的最后一个位置,再走,就超出了可存放元素的位置。解释一下,教室里可以做100个学生...
数据结构C语言版的图书目录
2括号匹配的检验493?2?3行编辑程序493?2?4迷宫求解503?2?5表达式求值52**3.3栈与递归的实现543.4队列583.4.1抽象数据类型队列的定义583.4.2链队列——队列的链式表示和实现603.4.3循环队列——队列的顺序表示和实现63**3.5离散事件模拟65第4章串704.1串类型的定义704.2串的表示和实现724....
常用数据结构有哪些
链表是物理存储单元上非连续的、非顺序的存储结构,数据元素的逻辑顺序是通过链表的指针地址实现,每个元素包含两个结点,一个是存储元素的数据域 (内存空间),另一个是指向下一个结点地址的指针域。根据指针的指向,链表能形成不同的结构,例如单链表,双向链表,循环链表等。5、树 树是一种数据结构,...
求09年3月份全国计算机等级考试二级c语言笔试试题的详细讲解
09年3月全国计算机等级考试二级C笔试真题(附答案)(考试时间90分钟,满分100分)一、选择题(1)下列叙述中正确的是 A) 栈是先进先出(FIFO)的线性表B) 队列是先进先出(FIFO)的线性表C) 循环队列是非线性结构D) 有序线性表既可以采用顺序存储结构,也可以采用链式存储结构(2)支持子程序调用的数据结构是 A) 栈 ...
二级c语言,队列、循环队列是什么?
队列是一种特殊的线性表,循环队列是将向量空间想象为一个首尾相接的圆环。1、队列是一种特殊的线性表,特殊之处在于它只允许在表的前端(front)进行删除操作,而在表的后端(rear)进行插入操作,和栈一样,队列是一种操作受限制的线性表。2、循环队列是将向量空间想象为一个首尾相接的圆环,并称...