求一个完整的C程序验证顺序存储结构--循环队列的基本操作
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了求一个完整的C程序验证顺序存储结构--循环队列的基本操作相关的知识,希望对你有一定的参考价值。
(1)编写一个程序,实现顺序环形队列的各种基本运算,并在此基础上设计一个主程序完成如下功能:(1)初始化队列q;
(2)判断队列q是否非空;
(3)依次进队元素100、909、44、8;
(4)出队一个元素,输出该元素;
(5)输出队列q的元素个数;
(6)依次进队元素-67、55、99、70;
(7)输出队列q的元素个数;
#include<stdio.h>
#include<malloc.h>
#define QUEUE_INIT_SIZE 100
#define QUEUEINCREMENT 10
#define OK 1
#define TURE 1
#define FALSE 0
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
typedef int QElemType;
typedef struct
QElemType *base;
int front;
int rear;
SqQueue;
Status InitQueue(SqQueue &Q)
Q.base=(QElemType *)malloc
(QUEUE_INIT_SIZE*sizeof(QElemType));
if(!Q.base)
exit(OVERFLOW);
Q.front=Q.rear=0;
return OK;
int QueueNumElem(SqQueue Q)
return (Q.rear-Q.front)%QUEUE_INIT_SIZE;
Status EnQueue(SqQueue &Q,QElemType e)
if((Q.rear+1)%QUEUE_INIT_SIZE==Q.front)
return ERROR;
Q.base[Q.rear]=e;
Q.rear=(Q.rear+1)%QUEUE_INIT_SIZE;
return OK;
SqQueue DeQueue(SqQueue Q,int e)
int i;
if(Q.front==Q.rear)
printf("队为空!\n");
for(i=e;i<Q.rear;i++)
Q.base[i]=Q.base[i+1];
Q.rear--;
return Q;
int main()
SqQueue Q,Q1;
static int qele=0;
int i,j=0,k=0,m=0;
static int frontd=Q.front;
i=InitQueue(Q);
if(i==1)
printf("队初始化成功!!\n");
else
printf("队初始化失败!!\n");
if(Q.front!=Q.rear)
printf("队不为空!!\n");
else
printf("队为空L!!\n");
printf("输入数据(END of '9999'):");
scanf("%d",&qele);
while(qele!=9999||Q.rear==Q.front)
EnQueue(Q,qele);
scanf("%d",&qele);
frontd=Q.front;
while(Q.rear!=Q.front)
printf(" %d ",Q.base[Q.front]);
Q.front++;
j++;
printf("\n");
Q.front=frontd;
printf("输入要出队的元素:");
scanf("%d",&j);
while(Q.front!=Q.rear)
if(Q.base[Q.front]==j)
printf("%d\n",Q.base[Q.front]);
Q=DeQueue(Q,Q.front);
m++;
break;
Q.front++;
Q.front=frontd;
while(Q.front!=Q.rear)
printf(" %d ",Q.base[Q.front]);
Q.front++;
printf("\n");
Q.front=frontd;
printf("队的长度:%d\n",Q.rear-Q.front);
printf("输入数据(END of '9999'):");
scanf("%d",&qele);
while(qele!=9999||Q.rear==Q.front)
EnQueue(Q,qele);
scanf("%d",&qele);
Q.front=frontd;
printf("队的长度:%d\n",Q.rear-Q.front);
Q.front=frontd;
printf("出队顺序:");
while(Q.rear!=Q.front)
printf(" %d ",Q.base[Q.front]);
Q=DeQueue(Q,Q.front);
m++;
printf("end\n");
Q.front=0;
Q.rear=m;
while(Q.rear!=Q.front)
free(Q.base);
//Q.base++;
Q.front++;
if(Q.rear-1==Q.front)
printf("队已经释放!\n");
return 0;
参考技术A 我只会CS而且只会一点点 参考技术B 问专业人士
计算机二级Java语言卷007
选择题
公共知识
【1】下列叙述中正确的是()。
在实际应用中, 队列的顺序存储结构一般采用循环队列的形式。
【2】下列关于线性链表的叙述中, 正确的是()。
一般来说, 在线性表的链式存储结构中, 各数据结点的存储序号是不连续的, 并且各结点在存储空间中的位置关系与逻辑关系也不一致。线性链表中数据的插入和删除都不需要移动表中的元素, 只需改变结点的指针域即可。
【3】一棵二叉树共有25个结点, 其中5个是叶子结点, 则度为1的结点数为()。
根据二叉树的性质3: 在任意一棵二叉树中, 度为0的叶子结点总是比度为2的结点多一个, 所以本题中度为2的结点是5 - 1 = 4个, 所以度为1的结点的个数是25 - 5 - 4 = 16个。
【4】在下列模式中, 能够给出数据库物理存储结构与物理存取方法的是()。
数据库系统的三级模式是概念模式、外模式和内模式。概念模式是数据库系统中全局数据逻辑结构的描述, 是全体用户公共数据视图。外模式也称子模式或用户模式, 它是用户的数据视图, 给出了每个用户的局部数据描述。内模式又称物理模式, 它给出了数据库物理存储结构与物理存取方法, 所以选择B。
【5】在满足实体完整性约束的条件下()。
实体完整性约束要求关系的主键中属性值不能为空值, 所以选择A。
【6】有三个关系R、S和T如下:
则由关系R和S得到关系T的操作是()。
则由关系R和S得到关系T的操作是()。
如果S = T / R, 则S称为T除以R的商。在除运算中S的域由T中那些不出现在R中的域所组成, 对于S中的任一有序组, 由它与关系R中每个有序组所构成的有序组均出现在关系T中。所以本题选择C。
【7】下面描述中, 不属于软件危机表现的是()。
软件危机主要表现在: 软件需求的增长得不到满足; 软件开发成本和进度无法控制; 软件质量难以保证; 软件不可维护或维护程度非常低; 软件的成本不断提高; 软件开发生产率的提高赶不上硬件的发展和应用需求的增长。所以选择A。
【8】下面不属于需求分析阶段任务的是()。
需求分析阶段的工作有: 需求获取; 需求分析; 编写需求规格说明书; 需求评审, 所以选择D。
【9】在黑盒测试方法中, 设计测试用例的主要根据是()。
黑盒测试是对软件已经实现的功能是否满足需求进行测试和验证, 黑盒测试完全不考虑程序内部的逻辑结构和内部特性, 只根据程序的需求和功能规格说明, 检查程序的功能是否符合它的功能说明, 所以本题选择B。
【10】在软件设计中不使用的工具是()。
系统结构图是对软件系统结构的总体设计的图形显示。在需求分析阶段, 已经从系统开发的角度出发, 把系统按功能逐次分割成层次结构, 是在概要设计阶段用到的。PAD图是在详细设计阶段用到的。程序流程图是对程序流程的图形表示, 在详细设计过程中用到。数据流图是结构化分析方法中使用的工具, 它以图形的方式描绘数据在系统中流动和处理的过程, 由于它只反映系统必须完成的逻辑功能, 所以它是一种功能模型, 是在可行性研究阶段用到的而非软件设计时用到, 所以选择C。
专业知识
【11】下列对Java语言的叙述中, 错误的是
一个java源程序中可以有多个类, 但是这些类中只能有一个带public修饰符, 选项B错误。本题答案为B选项。
【12】下列运算符中优先级最高的是
运算符的优先级高低顺序参照
。本题答案为A选项。
【13】下列语句中, 错误的是
布尔表达式初始化的值只能是true或false, 选项C语法错误, 本题答案为C选项。
【14】下列代码段执行后, x, y的值分别是
int x, y;
x = 3;
y = ++x;
x = y++;
前置“++”变量先自增在参加运算。后置“++”先运算在自增。“y = ++x”变量x先自增为4, 然后赋值给y, y = 4。“x = y++”先将y的值赋给x, 此时x = 4, 然后y进行自增, 加1后为5。变量x和y的值为: 4, 5。本题答案为D选项。
【15】若想表示x在0到10的范围内, 则Java的正确表达式是
表示x在0到10的范围的式子为: x > 0 && x < 10。本题答案为C选项。
【16】下列程序编译与运行的结果是
private class ID_Test {
int i = 0;
public static void main(String[] args) {
ID_Test t = new ID_Test();
System.out.println("i= " + t.i);
t.increments();
System.out.println("i= " + t.i);
}
public int increments() {
return i++;
}
}
每个 Java 程序的主类都必须是 public 类, 所以第一行编译有错误。本题答案为D选项。
【17】下列代码段执行后, a的值为
int a = 8, b = 6, c = 5;
if (a > b)
a = b;
else if (a > c)
a = c;
本题考查的是if else分支结构。如果if里面的条件为真, 执行if后面的代码块, 否则程序执行else子句。因为if里面的条件为真, 所以把b赋值给a, 则a = 6。本题答案为C选项。
【18】下列代码段执行后, s的值为
int s = 0;
int x = 12;
for (int i = 1; i < x; i++)
if (x % i == 0)
s = s + i;
本题考查for循环和if条件判断。只有符合if条件, 才会执行后面的代码块, 当i等于1, 2, 3, 4, 6的时候符合判断条件, 将i的值累加到变量s, 则s = 16。当i = 12时, 循环退出。本题答案为C选项。
【19】下列代码段执行后, a[3]的值为
int []a = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
for (int k = 0; k < 5; k ++)
a[k] += a[9 - k];
本题考查一维数组。由“a[k] += a[9 - k]”可知a[3] = a[3] + a[6], 因为a[3] = 4, a[6] = 7, 则a[3] = 11。本题答案为D选项。
【20】下列代码段执行后, n的值为
int n = 0;
for (int i = 1; i <= 5; i += 2)
for (int j = 5; j > 0; j--) {
if (i == j) continue;
n++;
}
本题考查双重for循环和continue的用法。首先外层for循环执行了3趟, 分别是i = 1、i = 3、i = 5。第一趟当i = 1时内循环执行了4次; 第二趟当i = 3时内循环执行4次; 第三趟里面的循环执行了4次; 因为当符合if条件时执行continue语句跳出本次循环, 执行下一次。本题答案为C选项。
【21】下列叙述中, 错误的是
构造方法无返回值类型(void 也不行)。本题答案为D选项。
【22】下列代码的运行结果是
public void test() {
int[] i = new int[10];
try {
i[10] = 10; // int9
} catch(ArrayIndexOutOfBoundsException e) {
System.out.println(“array exception”);
} catch(Exception e) {
System.out.println(“exception”);
} finally {
System.out.println(“end”);
}
}
本题考查异常的捕获。数组i的长度为10, i[10]已经越界, 捕获异常执行第一个catch语句, 输出“array exception”。无论是否捕获异常都会执行finally代码块, 打印“end”。本题答案为D选项。
【23】下列能正确定义二维整型数组的是
本题考查数组的定义。使用 数据类型 变量名[][] 来定义二维数组。 定义数组时也可同时初始化, 选项B、D不正确; 选项A中应为new int[6][6]; 本题答案为C选项。
【24】24)若特快订单是一种订单, 则特快订单类和订单类的关系是
继承是Java语言的一个特性, 允许将一个类定义为一个更通用类的特例。特殊类称为子类, 通用类称为父类。特快订单类和订单类, 这两者有显著的类似性, 共享很多属性及方法。除了订单类的属性外, 特快订单类可能还有其他一些特殊属性。显然, 订单类是通用类, 即父类; 而特快订单类是定单类的一个特例, 是子类。订单类和特快订单类是继承关系。本题答案为C选项。
【25】下列给字符型二维数组进行赋值的语句中, 错误的是
二维数组的说明为: 类型说明符 数组名[][]; 本题答案为B选项。
【26】下列可加入类Manager中的方法是
public class Employer {
protected void promote() { … }
}
class Manager extends Employer {
}
子类继承父类中的方法, 访问修饰符权限不能小于父类, 已知修饰符权限: public > protected > 默认的(default) > private。同时选项D中, promote()方法有方法体, 不能加abstract关键字。本题答案为A选项。
【27】下列代码中, 将引起错误的是
class Employer {
private String name;
public Employer() { }
}
public class Manager extends Employer {
private String department;
public Manager() { }
public String getValue() { return name; }
public static void main(String args[]) {
Employer p = new Employer();
}
}
Employ是父类, name属性是私有化的, 只有本类可以访问。Manage是Employ子类不能访问父类里面的name。第8行出现错误, 本题答案为D选项。
【28】下列说法中正确的是
本题考查java中的三种变量。实例变量是归属于类的实例的变量, 又称为成员变量, 没有经过static修饰, 选项B错误; 类方法是用static修饰的方法, 只可以访问静态变量不能访实例变量, 选项C错误; 局部变量在使用的时候必须进行初始化操作, 选项D错误; 实例变量是类的成员变量。本题答案为A选项。
【29】Java中XML流的相关类所在的包是
选项A是提供压缩包解压和压缩的操作的类; 选项B是提供读写jar文件的类; 选项D是处理图片操作的类; 选项C是处理读取xml文件相关的类。本题答案为C选项。
【30】下列选项中不属于过滤流的类是
RandomAccessFile的唯一父类是Object, 与其他流父类不同。是用来访问那些保存数据记录的文件的。RandomAccessFile不属于过滤流。本题答案为C选项。
【31】抽象类Writer中用于清空输出流, 并将缓冲的字符全部写入输出流的方法是
将数据预存到缓冲池中时, 当数据的长度满足缓冲池中的大小后, 才会将缓冲池中的数据成块的发送, 若数据的长度不满足缓冲池中的大小, 需要继续存入, 待数据满足预存大小后再成块的发送。往往在发送文件过程中, 文件末尾的数据大小不能满足缓冲池的大小。最终导致这部分的数据停留在缓冲池无法发送。这时, 就需要在write()方法后, 手动调用flush()方法, 强制刷出缓冲池中的数据, (即使数据长度不满足缓冲池的大小)从而保证数据的正常发送。当然, 当调用流的close()方法后, 系统也会自动将输出流缓冲区的数据刷出, 同时可以保证流的物理资源被回收。本题答案为C选项。
【32】Java中JTextComponent类所在的包是
JTextComponent是swing文本组件的基类, Java程序员最熟悉的JEditorPane、JTextArea和JTextField文本控件就是该类的子类。JTextComponent类所在的包是: javax.swing.text。本题答案为C选项。
【33】下面的代码运行后得到的结果是
import javax.swing.*;
public class testOut {
public static void main(String[] args) {
JOptionPane.showConfirmDialog(null, "良好", "考试结果", JOptionPane.YES_NO_OPTION);
}
}
showConfirmDialog(Component parentComponent, Object message, String title, int optionType)方法。parentComponent - 确定在其中显示对话框的 Frame; 如果为 null 或者 parentComponent 不具有 Frame, 则使用默认的 Frame ; message - 要显示的 Object ; title - 对话框的标题字符串; optionType - 指定可用于对话框的选项的 int: YES_NO_OPTION、YES_NO_CANCEL_OPTION 或 OK_CANCEL_OPTION 。本题答案为B选项。
【34】下列组件中属于容器的是
JApplet: 小应用程序类, 需要依靠浏览器执行。是Swing容器类的顶级容器。本题答案为C选项。
【35】如果希望所有的控件在界面上按网格均匀排列, 应使用的布局管理器是
本题考查布局管理器。A是卡片布局管理器, 它能够让多个组件共享同一个显示空间, 共享空间的组件之间的关系就像重叠在一起的一幅扑克牌, 组件重叠在一起。BorderLayout是一个布置容器的边框布局, 它可以对容器组件进行安排, 并调整其大小。flowLayout即流式布局, 就是说控件会按排分布, 当一行装不下的时候自动换到下一行。GridLayout网格布局, 界面上按网格均匀排列。本题答案为B选项。
【36】下列关于Java线程的说法, 正确的是
Thread类属于java.lang包, B选项错误; Java中的线程模型包含3部分, 包含代码和数据和一个虚拟的CPU, C选项错误; 一个进程可以拥有多个线程, D选项错误; 线程是用户级实体, 线程结构驻留在用户空间中。本题答案为A选项。
【37】为了使下列程序正常运行并且输出10个字符a, 在下划线处应填入的是
public class Test8 {
public static void main(String[] args) {
Thread printA = new Thread(new PrintChar('a', 10));
printA.start();
}
}
class PrintChar __________ {
private char charToPrint;
private int times;
public PrintChar(char c, int t) {
charToPrint = c;
times = t;
}
public void run() {
for (int i = 1; i < times; i++) {
System.out.print(charToPrint);
try {
Thread.sleep(1000);
} catch(Exception e) { }
}
}
}
程序中, 实例化线程类的参数为“new PrintChar(‘a‘, 10)”, 可知“PrintChar”类实现了Runnable接口。本题答案为C选项。
【38】在创建一个新的线程后, 为了使线程能够运行, 需要调用的方法是
创建一个新的线程, 为了使线程能够运行, 需要调用的方法是start()方法。本题答案为B选项。
【39】Java Applet的三种方法: init(), start(), stop(), 在Applet加载和运行过程中, 可能出现的调用顺序是
Applet程序的生命周期相应的方法为: init(), start(), stop()和destroy()。在Applet加载和运行过程中, 可能出现的调用顺序是init(), start(), stop()。本题答案为A选项。
【40】要向Applet传递参数, 应该在下列hello.html文件的下划线处填入的选项是
……
<applet code = Hello.class width = 100 height = 100>
<_______ value = " Hi! ">
……
……
<applet code = Hello.class width = 100 height = 100>
<_______ value = " Hi! ">
……
PARAM标签就是用来给Applet传递参数的。必须要有name属性和value值。下划线处填入的选项是: param name = "str"。本题答案为C选项。
以上是关于求一个完整的C程序验证顺序存储结构--循环队列的基本操作的主要内容,如果未能解决你的问题,请参考以下文章
C/C++数据结构-完整代码队列Queue(顺序存储,链式存储)增删改查
数据结构(C语言版)严蔚敏->队列的顺序存储(循环队列)和链式存储