北京工业大学-计算机软件基础考试习题

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。


运算处理

内容:建表、插入、删除、输出; 实现:利用指针变量作为函数参数,传递 线性表地址;
•void CreateList (SequenList *L) { • int n, i, mydata;
• printf("\nPlease input total number of data item\n");


int exp;
struct polyterm *next;

} TERM;

10.设有编号为1,2,3,4的四辆列车,顺序 进入一个栈式结构的车站,具体写出这四辆列 车开出车站的所有可能的顺序。


1, 2, 3, 4 1, 3, 4, 2 2, 1, 4, 3 2, 4, 3, 1 3, 4, 2, 1

人—机交互部分

内容:通过屏幕提示功能选择菜单; 通过键盘输入实现功能的选择; 要求:提示内容清晰易读,

键盘操作简单准确;

实现:循环扫描键盘,等待用户输入;
根据输入内容确定要执行的分支程序。










int main( ) { SequenList MyList,*L; char cmd; int i, t, x; L=&MyList; L->last=-1; do { do { clrscr( ); printf("\n\t c, C......Create List\n"); printf("\n\t i, I .....Insert"); printf("\n\t d, D......Delete"); •while •While ((cmd!='d')&&(cmd!='D')&& ((toupper(cmd)!='D')&& printf("\n\t q, Q......Quit\n\tYour choice:"); (cmd!='q')&&(cmd!='Q')&& (toupper(cmd)!='Q')&& cmd=getchar( );
3 .评价一个“正确的”算法主要有哪两个指 标?
(1) 时间复杂度:依据算法编制成程序后,在计算机 上运行时所消耗的时间。 (2) 空间复杂度:依据算法编制成程序后,在计算机 执行过程中所需要的最大存储空间。



4 .描述以下三个概念的区别:头指针、头结 点、首元结点(第一个元素结点)。
头指针就是指向链表中第一个结点的指针。单链表是 由头指针唯一确定的。因此可以用头指针的名字来命 名单链表。 头结点是在单链表第一个元素所在结点之前附设的一 个结点。头结点的指针域存储第一个元素所在结点的 存储位置;数据域可以不存储任何信息,也可以存储 如线性表的长度等附加信息。设置头结点后,可使空 表和非空表的逻辑状态及运算统一起来。 首元结点就是第一个数据元素所在的结点。
习 题 课

1.名词解释:数据,数据元素,数据结构。
数据:数据就是计算机可以保存和处理的信息。 数据元素:是组成数据的基本单位。 数据元素可以是一个数或字符串,也可以由 若干数据项组成。数据项是数据的最小单位。


数据结构:简单地说,数据结构就是研究数据及数据 元素之间关系的一门学科。它包括三个方面的内容: 数据的逻辑结构、数据的存储结构和数据的运算。 数据结构是指数据之间的相互关系,即数据的组 织形式。可以从集合的观点对数据结构加以形式化描 述,即是一个二元组:
Data-Structure = (D, R)
其中:D是数据元素的集合,R是D上关系的集合。
逻辑结构:数据的逻辑结构是指反映数据元素之间逻
辑关系的数据结构,它与数据的存储无关,是独立于 计算机的。
存储结构:数据的存储结构是逻辑结构用计算机语言
的实现(亦称映像),它是依赖于计算机语言的。
(1) 存放A至少需要( )个字节。
(2) A的第8列和第5行共占( )个字节。 (3) 若A按行存放,元素A[8,5] 的起始地址与当A按 列存放时的元素( )的起始地址一致。 [供选择答案]





(1) a. 90; b. 180; c. 240; d. 270; e. 540;
(2) a. 108;b. 114;c. 54; d. 60; e. 150; (3) a. A[8,5];b. A[3,10];c. A[5,8];d. A[0,9]。
1, 2, 4, 3 1, 4 , 3 , 2 2, 3 , 1 , 4 3, 2 , 1 , 4 4, 3 , 2 , 1
1 , 3, 2, 4 2, 1 , 3 , 4 2, 3 , 4 , 1 3, 2 , 4 , 1

12 .假设以数组 sequ[m] 存放循环队列的元素 ,同时设变量 rear 和 quelen 分别指示队尾元素 的位置和内含元素的个数。试给出此循环队列 的队满条件,并写出相应的入列和出列算法。
int sequ[MAXSIZE]; /* 假设数据元素的类型为整型*/ int quelen=0, rear=MAXSIZE-1;

void addqueue(int x) {


if (quelen == MAXSIZE) {
printf(''循环队列已满,上溢! \n''); exit(1); } else {


return x;
}

13.试将下列稀疏矩阵A用三元组形式来表示。
0
0 •A= 8
3
0 0
0
0 0 0
0 -7
0 0 0 0 0 0 0 0
20 0 0
0 -13
0 1 2 3
5 1 1 3
5 2 5 1
5 3 -7 8
4 5
4 5
1 3
20 -13

16.二维数组A的元素是6个字符组成的串,行 下标i的范围从0到8,列下标j的范围从1到10。 从供选择的答案中选出应填入下列关于数组存 储叙述中( )内的正确答案。
p=p->next; q->next=s;
9.设有多项式 A(x) = 7 + 3x + 9x8 + 3x15 B(x) = 5x + 6x7-9x8 (1) 用单链表给出A(x)的存储表示; (2) 用单链表给出B(x)的存储表示;

数据存储结构:
typedef struct polyterm { int coef;

算法:是由若干条指令组成的有限序列。

2.简述算法的五要素。
– 有穷性:每条指令的执行次数必须是有限的。
– 确定性:每条指令的含义必须明确,无二义性。
– 可行性:每条指令都应在有限的时间内完成。
– 输入性:具有零个或多个输入量,即算法开始前对 算法给出的初始量。 – 输出性:至少产生一个输出。


重复上述处理直至p->next=s;

(4) 令q->next=s; free(p)。

void delprior(NODE *s) {


NODE *p, *q;
p=s->next; q=p; free(p); } q=s; }
while(p->next!=s) {

(1) 9*10*6=540
(2) (9+9)*6=108
(3) 8*10+5=85;85/9=9 余 4 答案:A[3,10];
试验一:线性表的设计与实现

1. 线性表基本操作的实现: – 数据的存储结构 #define MaxSize 1024 typedef int DataType; typedef struct node { DataType data[MaxSize]; int last; } SequenList;
队满条件:quelen==m step1. 判定循环队列是否已满,若满,则给出队列溢 出出错信息; step2. 队尾指针后移,将入队元素放入队尾指针所指 的存储位置。 step3. 队列元素个数增1。




#define MAXSIZE m


/* m为队列中数据元素个数的最大可能值*/


rear = (rear+1)% MAXSIZE;
sequ [rear] = x; quelen++; } }

step1. 判定循环队列是否为空,若空,则给出队列溢
出(下溢)信息;

step2. 计算队头指针值,并读取队头元素; step3. 队列元素个数减1。 #define MAXSIZE m int sequ[MAXSIZE]; int quelen=0, rear=MAXSIZE-1;


int delqueue( ) {
int front, x; if (quelen == 0) { printf(''循环队列已空,下溢! \n''); x =-1; }


else {
front=(rear-quelen+MAXSIZE+1)% MAXSIZE; x = sequ[front]; quelen--; }
• • • • • • • • •}
scanf("%d",&n); for(i=0;i<n;i++) { printf("data[%d]=", i+1); scanf("%d", &mydata); L->data[i]=mydata; } L->last=n-1; printf("\nPress any key to continue\n"); getch( );
the data to be inserted:"); •scanf case 'c': ("%d",&x); case 'C': CreateList(L); break; •printf ("\nInput the poistion to be inserted:"); case 'i': ("\n(1--%d)\n",(L->last+2)); •printf case 'I': ??? Insert(L,x,i); PrintOut(L); •scanf ("%d",&i);

6.假设有一个循环单链表的长度大于1,且表 中既无头结点也无头指针。已知 S 为指向链表 中某结点的指针,试编写算法,在链表中删除 结点S的前趋结点。
提示: (1) 定义一个指针变量p指向结点*s的直接后继; (2) 定义一个指针变量q指向结点*s; (3) 当p->next不等于s时,令q=p,p=p->next;
int








Insert (SequenList *L, DataType x, int i) { int j; if (L->last==(MaxSize-1)) { printf ("\nOverflow!"); return Null; } else if ((i<1)||( i>(L->last+2))) { printf ("range error"); return Null; } else { for (j=L->last;j>=i-1;j--) L->data[j+1]=L->data[j]; L->data[i-1]=x; L->last=L->last+1; } return (1);
(cmd!='i')&&(cmd!='I')&& (toupper(cmd)!='I')&& } while (??? ); (cmd!='c')&&(cmd!='C')); •(toupper(cmd)!='C'));
("\nInput •printf switch (cmd) {
• printf("\nInput the index_No of break; data to be deleted\n"); getch(); • printf("\n(1---%d):\n",(L->last+1)); case 'd': • scanf("%d",&i); case 'D': ? ? ? Delete(L,i); PrintOut(L); getch(); break; default: break; } } while((cmd!='q') && (cmd!='Q')); •} while (toupper (cmd)!='Q'); }




5 .有一线性表存储在一个带头结点的循环单 链表L中,写出计算线性表元素个数的算法。 int length(NODE *L) {



NODE *p;
int counter=0;


p=L->next;whiLeabharlann e(p!=L) {
p=p->next;
counter++; }

return counter; }
相关文档
最新文档