数据结构题

绪论
一、选择题
1.数据的基本单位是
A.数据元素 B.数据项
C.字段 D.域
2.数据的逻辑结构可以分为
A.动态结构和静态结构 B.顺序结构和链式结构
C.线性结构和非线性结构 D.简单结构和构造结构
3.数据结构中结点按逻辑关系依次排列形成一条“链”的结构是
A.集合 B.图结构
C.树形结构 D.线性结构
4.数据的存储方式中除了顺序存储方式和链式存储方式之外,还有
A.索引存储方式和树形存储方式 B.线性存储方式和散列存储方式
C.线性存储方式和索引存储方式 D.索引存储方式和散列存储方式
5.若结点的存储地址与其关键字之间存在某种映射关系,则称这种存储结构为( )
A.顺序存储结构 B.链式存储结构
C.索引存储结构 D.散列存储结构
6.计算机识别、存储和加工处理的对象被统称为( )
A.数据 B.数据元素
C.数据结构 D.数据类型
7.在数据结构中,数据的逻辑结构可以分成(   )
A.内部结构和外部结构 B.线性结构和非线性结构
C.紧凑结构和非紧揍结构 D.动态结构和静态结构
8.与数据存储结构无关的概念是
A.栈 B.链表
C.顺序表 D.二叉链表
9.算法的空间复杂度是指
A.算法中输入数据所占用的存储空间的大小
B.算法本身所占用的存储空间的大小
C.算法中所占用的所有存储空间的大小
D.算法中需要的辅助变量所占用存储空间的大小
10.算法的时间复杂度表征的是
A.算法的可读性 B.算法的难易程度
C.执行算法所耗费的时间 D.执行算法所耗费的存储空间
11.下列几种算法时间复杂度中,最大的是
A.O(1) B.O(n)
C.O(nlog2n) D.O(n2)
12.下列几种算法时间复杂度中,最小的是
A.O(log2n) B.O(n)
C.O(n2) D.O(1)
13.下面程序段的时间复杂度是( )
for(i=0;i<n;i++)
for(j=1;j<m;j++)
A[i][j]=0;
A.O(n) B.O(m+n+1) C.O(m+n) D.O(m*n)
二、填空题
1.下面算法程序段的时间复杂度为__________。
for(i=1;i<=n;i++)
for(j=1;j<=i;j++)
{x=a[i][j];
a[i][j]=a[j][i];
a[j][i]=x;}
2.算法的时间复杂度与实现时采用的程序设计语言____________。
3.数据中不可分割的最小标识单位是__________。
4.数据的同一种逻辑结构,可以对应多种不同的__________。
5.数据的基本单位是_________。
6.数据结构研究的内容包括数据的逻辑结构、和数据的运算。
7.若一个算法中的语句频度之和为T(n)=3720n+4nlogn,则算法的时间复杂度为

8.抽象数据类型的特点是将____________和____________封装在一起,从而现实信息隐藏。
9.当问题的规模n趋向无穷大时,算法执行时间T(n)的数量级被称为算法的________。
10.下列程序段的时间复杂度为________________。
  product = 1;
  for (i = n;i>0; i–)
   for (j = i+1; j<n; j++)
    product *=j;

线性表
一、选择题
1.线性表是一个有限序列,组成线性表的基本单位是
A.数据项 B.数据元素
C.数据域 D.字符
2.在表长为100的顺序表中做插入运算,平均移动元素的次数为
A.25 B.33
C.50 D.100
3.从一个长度为100的顺序表中删除第30个元素,需向前移动的元素个数为
A.29 B.30
C.70 D.71
4.表长为n的顺序表中做删除运算的平均时间复杂度为
A.O(1) B.O(log2n)
C.O(n) D.O(n2)
5.顺序表中定位算法(查找值为x的结点序号最小值)的平均时间复杂度为
A.O(1) B.O(log2n)
C.O(n) D.O(n2)
6.顺序表中有10个数据元素,若第一个元素的存储地址是1000,则最后一个元素地址是1036,第5个元素的地址是
A.1010 B.1016
C.1018 D.1019
7.在长度为n的顺序表的第i(1≤i≤n+1)个位置上插入一个元素,元素的移动次数为( )
A.n-i+1 B.n-i
C.i D.i-1
8.在以单链表为存储结构的线性表中,数据元素之间的逻辑关系用(   )
A.数据元素的相邻地址表示 B.数据元素在表中的序号表示
C.指向后继元素的指针表示 D.数据元素的值表示
9.设p指向单链表中的一个结点,s指向待插入的结点,则下述程序段的功能是(   )
     s -> next = p -> next; p -> next = s;
t = p -> data; p -> data = s -> data; s ->data = t;
A.结点p与结点s的数据域互换
B.在p所指结点的元素之前插入元素
C.在p所指结点的元素之后插入元素
D.在结点p之前插入结点s
10.已知尾指针的单向循环链表中,在第一个结点后面插入一个新结点,该算法的时间复杂度为
A.O(1) B.O(log2n)
C.O(n) D.O(n2)
11.在单链表中,指针p指向元素为x的结点,实现“删除x的后继”的语句是( )
A.p=p->next; B.p->next=p->next->next;
C.p->next=p; D.p=p->next->next;
12.在头指针为head且表长大于1的单循环链表中,指针p指向表中某个结点,若p->next->next=head,则( )
A.p指向头结点 B.p指向尾结点
C.*p的直接后继是头结点 D.*P的直接后继是尾结点
13.在具有n个结点的有序单链表中插入一个新结点并使链表仍然有序的时间复杂度是( )
A.O(1) B.O(n)
C.O(nlogn) D.O(n2)
14.在头指针为head的循环链表中,判断指针变量P指向尾结点的条件是
A.p->next->nexthead B.p->nexthead
C.p->next->nextNULL D.p->nextNULL
15.若线性表最常用的操作是存取第i个元素及其后继的值,则最节省操作时间的存储结构是
A.单链表 B.双链表
C.单循环链表 D.顺序表
16.对需要频繁插入和删除结点的线性表,适合的存储方式是
A.顺序储存 B.链式存储
C.索引存储 D.散列存储
17.对于只在表的首、尾两端进行插入操作的线性表,宜采用的存储结构为( )
A.顺序表 B.用头指针表示的单循环链表
C.用尾指针表示的单循环链表 D.单链表

二、填空题
1.向一个长度为100的顺序表中第50个元素之前插入一个元素时,需向后移动的元素个数为__________。
2.在长度为n的顺序表的第i(1≤i≤n)个元素之后插入一个元素时,需向后移动___________个元素。
3.若在长度为n的顺序表第i个元素之前插入一个元素,则需要向后移动的元素个数是__________。
4.从顺序表中删除一个元素时,表中所有在被删元素之后的元素均需____________一个位置。
5.在如图所示的链表中,若在指针p所指的结点之后插入数据域值相继为a和b的两个结点,则可用下列两个语句实现该操作,它们依次是________和________。

6.在链表的结点中,数据元素所占的存储量和整个结点所占的存储量之比称作________。
7.已知指针p指向单链表中某个结点,则语句p -> next =p -> next -> next的作用是________________。
8.设p指向单链表的最后一个结点,要在最后一个结点之后插入q所指的结点,需执行的语句序列是①p->next=q;②__________;③p->next=NULL。
9.双向循环链表中,在p所指结点的后面插入一个新结点t,需要修改四个指针,分别为:t->prior=p;;p->next->prior=t;p->next=t;。
10.在带有头结点的循环链表中,头指针为head,判断指针p所指结点为首结点的条件是

11.双向循环链表中,在p所指结点的后面插入一个新结点
t,需要修改四个指针,分别为
t->prior=P;t->next=p->next;_;p->next=t;。
12.在带有头结点的循环链表中,尾指针为rear,判断指针P所指结点为首结点的条件是_________。
13.若线性表中最常用的操作是求表长和读表元素,则顺序表和链表这两种存储方式中,较节省时间的是_________。
14.头指针为L的带头结点的双循环链表,结点的前趋指针域为prior,后继指针域为next,判断该链表为空的条件是

三、应用题
1.在定义顺序表时,存放表结点的向量空间不宜过大也不宜过小,为什么?

四、算法设计题
1.单链表类型定义如下:
typedef struct node {
DataType data;
struct node *next;
}ListNode;
typedef ListNode *LinkList;
阅读下列算法,并回答问题:
void f1 (LinklList head, DataType x)
{ ∥head是带头结点的非空单链表的头指针
ListNode *p, q;
p=head;
while(p->next->next)
p=p->next;
q=(ListNode
) malloc (sizeof(ListNode));
q->data=x;
q->next=p->next;
p->next=q;
}
(1)该算法的功能是什么?
(2)若单链表的长度为n,算法的时间复杂度是多少?该时间复杂度和链表的初始状态有关吗?
2.阅读下列函数并回答问题
typedef struct node{
DataType data;
struct node next;
}LinkNode;
Typedef LinkNode
Linklist;

void DeleX(Linklist head,DataType x)
{
LinkNode*p,*q,*s;
p=head;q=p–>next;
while(q!=NULL)
if(q->data==x){
s=q;q=q->next;
free(s);p->next=q;
}
else{
p=q;q=q->next;
}
}
(1)执行该函数后,单链表head中data值为x的结点数是多少?
(2)该函数的功能是什么?

3.单链表类型定义如下:
typedef struct node {
int data;
struct node *next;
} ListNode;
typedef ListNode *LinkList;
用不带头结点的单链表存储待排数据,链表头指针为head。下列直接选择排序算法对链表按升序进行排序,请在答题纸相应位置填写适当内容使算法完整。
void f3(LinkList head)
{ ListNode *p, *q, *r;
int tmp;
p=head;
while(p)
{ q=p;设q指向最小元素的节点
r=p->next;
while( (1) r )
{ if( (2) r->datadata ) q=r;
r=r->next;
}
tmp=q->data;
q->data=p->data;
p->data=tmp;
p= p->next (3) ;
}
}
4.以下函数中,h是带头结点的双向循环链表的头指针。
(1)说明程序的功能;
(2)当链表中结点数分别为1和6(不包括头结点)时,请写出程序中while循环体的执行次数。
int f(DListNode *h)
{
DListNode *p,*q;
int j=1;
p=h->next;
q=h->prior;
while(p!=q && p->prior!=q)
if(p->data==q->data)
{
p=p->next;
q=q->prior;
}
else j=0;
return j;
}
5.下列函数的功能是,对以带头结点的单链表作为存储结构的两个递增有序表(表中不存在值相同的数据元素)进行如下操作:将所有在Lb表中存在而La表中不存在的结点插入到La中,其中La和Lb分别为两个链表的头指针。请在空缺处填入合适内容,使其成为一个完整的算法。
 void union (LinkList La, LinkList Lb)
{
//本算法的功能是将所有Lb表中存在而La表中不存在的结点插入到La表中
LinkList pre = La, q;
LinkList pa = La -> next;
LinkList pb = Lb -> next;
free (Lb);
while (pa && pd)
{
if (pa -> data <pb -> data)
{ pre = pa; pa = pa -> next;}
else if (pa -> data > pb ->data)
{
(1) ;
pre = pb;
pb = pb -> next;
(2) ;
}
else
{
q = pb; pb = pb -> next; free (q);
}
}
if (pb)
(3) ;
}
(1)
(2)
(3)
6. 试写出判断带头结点的单链表head中的元素值是否是递减的算法。
P=head->next;
While(p && p->next){
If(p->data<=p->next->data){
Return false;
}
P=p->next;
}
Return true;

7.单链表的结点结构定义如下:
typedef struct node
{ int data;
struct node *next;
}Node, *LinkList;
试编写在带头结点的单链表head中查找第1个元素值小于x的结点的实现算法Node *GetLinklist(LinkList head,int x),若找到,则返回指向该结点的指针,否则返回NULL。
Node *GetLinklist(LinkList head,int x){
P=head->next;
While§{
If(p->data<x) {
return p;
}
P=p->next;
}
Return NULL;
}
8.已知:
typedef struct node{
int data;
struct node *next;
} LinkNode;
typedef LinkNode *LinkList;

请编写原型为int Listisequal(LinkList A,LinkList B)的函数&#

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

鹤立雉群

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值