求一个完整的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】下列叙述中正确的是()。
〖A〗循环队列是队列的一种链式存储结构
〖B〗循环队列是队列的一种顺序存储结构
〖C〗循环队列是非线性结构
〖D〗循环队列是一种逻辑结构
在实际应用中, 队列的顺序存储结构一般采用循环队列的形式。
【2】下列关于线性链表的叙述中, 正确的是()。
〖A〗各数据结点的存储空间可以不连续, 但它们的存储顺序与逻辑顺序必须一致
〖B〗各数据结点的存储顺序与逻辑顺序可以不一致, 但它们的存储空间必须连续
〖C〗进行插入与删除时, 不需要移动表中的元素
〖D〗以上说法均不正确
一般来说, 在线性表的链式存储结构中, 各数据结点的存储序号是不连续的, 并且各结点在存储空间中的位置关系与逻辑关系也不一致。线性链表中数据的插入和删除都不需要移动表中的元素, 只需改变结点的指针域即可。
【3】一棵二叉树共有25个结点, 其中5个是叶子结点, 则度为1的结点数为()。
〖A〗16
〖B〗10
〖C〗6
〖D〗4
根据二叉树的性质3: 在任意一棵二叉树中, 度为0的叶子结点总是比度为2的结点多一个, 所以本题中度为2的结点是5 - 1 = 4个, 所以度为1的结点的个数是25 - 5 - 4 = 16个。
【4】在下列模式中, 能够给出数据库物理存储结构与物理存取方法的是()。
〖A〗外模式
〖B〗内模式
〖C〗概念模式
〖D〗逻辑模式
数据库系统的三级模式是概念模式、外模式和内模式。概念模式是数据库系统中全局数据逻辑结构的描述, 是全体用户公共数据视图。外模式也称子模式或用户模式, 它是用户的数据视图, 给出了每个用户的局部数据描述。内模式又称物理模式, 它给出了数据库物理存储结构与物理存取方法, 所以选择B。
【5】在满足实体完整性约束的条件下()。
〖A〗一个关系中应该有一个或多个候选关键字
〖B〗一个关系中只能有一个候选关键字
〖C〗一个关系中必须有多关键字个候选
〖D〗一个关系中可以没有候选关键字
实体完整性约束要求关系的主键中属性值不能为空值, 所以选择A。
【6】有三个关系R、S和T如下:
技术图片
则由关系R和S得到关系T的操作是()。
〖A〗自然连接
〖B〗
〖C〗
〖D〗
如果S = T / R, 则S称为T除以R的商。在除运算中S的域由T中那些不出现在R中的域所组成, 对于S中的任一有序组, 由它与关系R中每个有序组所构成的有序组均出现在关系T中。所以本题选择C。
【7】下面描述中, 不属于软件危机表现的是()。
〖A〗软件过程不规范
〖B〗软件开发生产率低
〖C〗软件质量难以控制
〖D〗软件成本不断提高
软件危机主要表现在: 软件需求的增长得不到满足; 软件开发成本和进度无法控制; 软件质量难以保证; 软件不可维护或维护程度非常低; 软件的成本不断提高; 软件开发生产率的提高赶不上硬件的发展和应用需求的增长。所以选择A。
【8】下面不属于需求分析阶段任务的是()。
〖A〗确定软件系统的功能需求
〖B〗确定软件系统的性能需求
〖C〗需求规格说明书评审
〖D〗制定软件集成测试计划
需求分析阶段的工作有: 需求获取; 需求分析; 编写需求规格说明书; 需求评审, 所以选择D。
【9】在黑盒测试方法中, 设计测试用例的主要根据是()。
〖A〗程序内部逻辑
〖B〗程序外部功能
〖C〗程序数据结构
〖D〗程序流程图
黑盒测试是对软件已经实现的功能是否满足需求进行测试和验证, 黑盒测试完全不考虑程序内部的逻辑结构和内部特性, 只根据程序的需求和功能规格说明, 检查程序的功能是否符合它的功能说明, 所以本题选择B。
【10】在软件设计中不使用的工具是()。
〖A〗系统结构图
〖B〗PAD图
〖C〗数据流图(DFD图)
〖D〗程序流程图
系统结构图是对软件系统结构的总体设计的图形显示。在需求分析阶段, 已经从系统开发的角度出发, 把系统按功能逐次分割成层次结构, 是在概要设计阶段用到的。PAD图是在详细设计阶段用到的。程序流程图是对程序流程的图形表示, 在详细设计过程中用到。数据流图是结构化分析方法中使用的工具, 它以图形的方式描绘数据在系统中流动和处理的过程, 由于它只反映系统必须完成的逻辑功能, 所以它是一种功能模型, 是在可行性研究阶段用到的而非软件设计时用到, 所以选择C。

专业知识

【11】下列对Java语言的叙述中, 错误的是
〖A〗JDK中进行Java程序编译的命令是javac
〖B〗一个Java源程序中可以有2个以上带有public修饰符的类
〖C〗Java的类是对具有相同行为对象的一种抽象
〖D〗Java中的垃圾回收机制是一个系统级的线程
一个java源程序中可以有多个类, 但是这些类中只能有一个带public修饰符, 选项B错误。本题答案为B选项。
【12】下列运算符中优先级最高的是
〖A〗!
〖B〗%
〖C〗=
〖D〗==
运算符的优先级高低顺序参照 技术图片。本题答案为A选项。
【13】下列语句中, 错误的是
〖A〗int a = 2;
〖B〗float b = 3.5f;
〖C〗boolean t = 1;
〖D〗double d = 1.6;
布尔表达式初始化的值只能是true或false, 选项C语法错误, 本题答案为C选项。
【14】下列代码段执行后, x, y的值分别是
int x, y;
x = 3;
y = ++x;
x = y++;
〖A〗3 4
〖B〗3 5
〖C〗4 3
〖D〗4 5
前置“++”变量先自增在参加运算。后置“++”先运算在自增。“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的正确表达式是
〖A〗0 < x < 10
〖B〗x > 0 and x < 10
〖C〗x > 0 && x < 10
〖D〗x > 0 , x < 10
表示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++;
    }
}
〖A〗第6行和第9行有编译错误
〖B〗第1行和第6行有编译错误
〖C〗程序通过编译, 并运行正常
〖D〗第1行有编译错误
每个 Java 程序的主类都必须是 public 类, 所以第一行编译有错误。本题答案为D选项。
【17】下列代码段执行后, a的值为
int a = 8, b = 6, c = 5;
if (a > b)
a = b;
else if (a > c)
a = c;
〖A〗0
〖B〗5
〖C〗6
〖D〗8
本题考查的是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;
〖A〗0
〖B〗12
〖C〗16
〖D〗28
本题考查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〗3
〖B〗4
〖C〗6
〖D〗11
本题考查一维数组。由“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++;
}
〖A〗1
〖B〗5
〖C〗12
〖D〗25
本题考查双重for循环和continue的用法。首先外层for循环执行了3趟, 分别是i = 1、i = 3、i = 5。第一趟当i = 1时内循环执行了4次; 第二趟当i = 3时内循环执行4次; 第三趟里面的循环执行了4次; 因为当符合if条件时执行continue语句跳出本次循环, 执行下一次。本题答案为C选项。
【21】下列叙述中, 错误的是
〖A〗方法的重载是指多个方法共享同一个名字
〖B〗用abstract修饰的类称为抽象类, 它不能实例化
〖C〗接口中不包含方法实现
〖D〗构造方法可以有返回值
构造方法无返回值类型(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”);
    }
}
〖A〗int9
〖B〗array exception
〖C〗exception
〖D〗array exception end
本题考查异常的捕获。数组i的长度为10, i[10]已经越界, 捕获异常执行第一个catch语句, 输出“array exception”。无论是否捕获异常都会执行finally代码块, 打印“end”。本题答案为D选项。
【23】下列能正确定义二维整型数组的是
〖A〗int i[][] = new int[6, 6];
〖B〗int i[6][6] = new int[][];
〖C〗int i[][] = new int[6][6];
〖D〗1int i[6, 6] = new int[][];
本题考查数组的定义。使用 数据类型 变量名[][] 来定义二维数组。 定义数组时也可同时初始化, 选项B、D不正确; 选项A中应为new int[6][6]; 本题答案为C选项。
【24】24)若特快订单是一种订单, 则特快订单类和订单类的关系是
〖A〗使用关系
〖B〗包含关系
〖C〗继承关系
〖D〗无关系
继承是Java语言的一个特性, 允许将一个类定义为一个更通用类的特例。特殊类称为子类, 通用类称为父类。特快订单类和订单类, 这两者有显著的类似性, 共享很多属性及方法。除了订单类的属性外, 特快订单类可能还有其他一些特殊属性。显然, 订单类是通用类, 即父类; 而特快订单类是定单类的一个特例, 是子类。订单类和特快订单类是继承关系。本题答案为C选项。
【25】下列给字符型二维数组进行赋值的语句中, 错误的是
〖A〗char c[][] = { { ‘1’, ‘2’ }, { ‘3’, ‘4’ } };
〖B〗char c[2][2] = { { ‘1’, ‘2’ }, { ‘3’, ‘4’ } };
〖C〗char c[][] = { { ‘0’ }, { ‘1’, ‘2’ }, { ‘3’, ‘4’ } };
〖D〗char c[][] = { { ‘0’ }, { ‘1’, ‘2’, ‘3’, ‘4’ } };
二维数组的说明为: 类型说明符 数组名[][]; 本题答案为B选项。
【26】下列可加入类Manager中的方法是
public class Employer {
    protected void promote() { … }
}
class Manager extends Employer {
}
〖A〗public void promote() { … }
〖B〗void promote() { … }
〖C〗private void promote() { … }
〖D〗abstract void promote() { … }
子类继承父类中的方法, 访问修饰符权限不能小于父类, 已知修饰符权限: 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();
    }
}
〖A〗第3行
〖B〗第6行
〖C〗第7行
〖D〗第8行
Employ是父类, name属性是私有化的, 只有本类可以访问。Manage是Employ子类不能访问父类里面的name。第8行出现错误, 本题答案为D选项。
【28】下列说法中正确的是
〖A〗实例变量是类的成员变量
〖B〗实例变量是用static关键字声明的
〖C〗类方法中可以访问实例变量
〖D〗局部变量在使用之前不需要初始化
本题考查java中的三种变量。实例变量是归属于类的实例的变量, 又称为成员变量, 没有经过static修饰, 选项B错误; 类方法是用static修饰的方法, 只可以访问静态变量不能访实例变量, 选项C错误; 局部变量在使用的时候必须进行初始化操作, 选项D错误; 实例变量是类的成员变量。本题答案为A选项。
【29】Java中XML流的相关类所在的包是
〖A〗java.util.zip
〖B〗java.util.jar
〖C〗javax.xml.stream
〖D〗javax.imageio
选项A是提供压缩包解压和压缩的操作的类; 选项B是提供读写jar文件的类; 选项D是处理图片操作的类; 选项C是处理读取xml文件相关的类。本题答案为C选项。
【30】下列选项中不属于过滤流的类是
〖A〗BufferedInputStream
〖B〗DataInputStream
〖C〗RandomAccessFile
〖D〗LineNumberInputStream
RandomAccessFile的唯一父类是Object, 与其他流父类不同。是用来访问那些保存数据记录的文件的。RandomAccessFile不属于过滤流。本题答案为C选项。
【31】抽象类Writer中用于清空输出流, 并将缓冲的字符全部写入输出流的方法是
〖A〗print()
〖B〗write()
〖C〗flush()
〖D〗close()
将数据预存到缓冲池中时, 当数据的长度满足缓冲池中的大小后, 才会将缓冲池中的数据成块的发送, 若数据的长度不满足缓冲池中的大小, 需要继续存入, 待数据满足预存大小后再成块的发送。往往在发送文件过程中, 文件末尾的数据大小不能满足缓冲池的大小。最终导致这部分的数据停留在缓冲池无法发送。这时, 就需要在write()方法后, 手动调用flush()方法, 强制刷出缓冲池中的数据, (即使数据长度不满足缓冲池的大小)从而保证数据的正常发送。当然, 当调用流的close()方法后, 系统也会自动将输出流缓冲区的数据刷出, 同时可以保证流的物理资源被回收。本题答案为C选项。
【32】Java中JTextComponent类所在的包是
〖A〗javax.swing.tree
〖B〗javax.swing.table
〖C〗javax.swing.text
〖D〗javax.swing.plaf
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);
    }
}
〖A〗技术图片
〖B〗技术图片
〖C〗技术图片
〖D〗技术图片
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】下列组件中属于容器的是
〖A〗JComboBox
〖B〗JList
〖C〗JApplet
〖D〗JMenu
JApplet: 小应用程序类, 需要依靠浏览器执行。是Swing容器类的顶级容器。本题答案为C选项。
【35】如果希望所有的控件在界面上按网格均匀排列, 应使用的布局管理器是
〖A〗CardLayout
〖B〗GridLayout
〖C〗FlowLayout
〖D〗BorderLayout
本题考查布局管理器。A是卡片布局管理器, 它能够让多个组件共享同一个显示空间, 共享空间的组件之间的关系就像重叠在一起的一幅扑克牌, 组件重叠在一起。BorderLayout是一个布置容器的边框布局, 它可以对容器组件进行安排, 并调整其大小。flowLayout即流式布局, 就是说控件会按排分布, 当一行装不下的时候自动换到下一行。GridLayout网格布局, 界面上按网格均匀排列。本题答案为B选项。
【36】下列关于Java线程的说法, 正确的是
〖A〗线程是用户级实体, 线程结构驻留在用户空间中
〖B〗Thread类属于java.util程序包
〖C〗Java中的线程模型只包含代码和数据两个部分
〖D〗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) { }
        }
    }
}
〖A〗无需填写代码
〖B〗implements Thread
〖C〗implements Runnable
〖D〗implements Serializable
程序中, 实例化线程类的参数为“new PrintChar(‘a‘, 10)”, 可知“PrintChar”类实现了Runnable接口。本题答案为C选项。
【38】在创建一个新的线程后, 为了使线程能够运行, 需要调用的方法是
〖A〗init()
〖B〗start()
〖C〗run()
〖D〗void main()
创建一个新的线程, 为了使线程能够运行, 需要调用的方法是start()方法。本题答案为B选项。
【39】Java Applet的三种方法: init(), start(), stop(), 在Applet加载和运行过程中, 可能出现的调用顺序是
〖A〗init(), start(), stop()
〖B〗start(), init(), stop()
〖C〗init(), stop(), start()
〖D〗start(), stop(), init()
Applet程序的生命周期相应的方法为: init(), start(), stop()和destroy()。在Applet加载和运行过程中, 可能出现的调用顺序是init(), start(), stop()。本题答案为A选项。
【40】要向Applet传递参数, 应该在下列hello.html文件的下划线处填入的选项是
……
<applet code = Hello.class width = 100 height = 100>
<_______ value = " Hi! ">

……
〖A〗str
〖B〗"str"
〖C〗param name = str
〖D〗F.param "str"
PARAM标签就是用来给Applet传递参数的。必须要有name属性和value值。下划线处填入的选项是: param name = "str"。本题答案为C选项。

以上是关于求一个完整的C程序验证顺序存储结构--循环队列的基本操作的主要内容,如果未能解决你的问题,请参考以下文章

求一个C语言 循环队列的插入 完整程序

数据结构学习笔记——顺序存储结构实现循环队列

C/C++数据结构-完整代码队列Queue(顺序存储,链式存储)增删改查

数据结构(C语言版)严蔚敏->队列的顺序存储(循环队列)和链式存储

C/C++数据结构-完整代码队列Queue(顺序存储,链式存储)增删改查

循环队列(顺序存储)