当前位置:文档之家› 数据结构各章复习题与答案

数据结构各章复习题与答案

第二章线性表一.名词解释
线性结构 2.数据结构的顺序实现 3.顺序表 4.链表二、填空题
1.为了便于讨论,有时将含n(n>=0)个结点的线性结构表示成(a
1,a
2
,……a
n
),其中每
个a
i 代表一个______。

a
1
称为______结点,a
n
称为______结点,i称为a
i
在线性表中的________
或______。

对任意一对相邻结点a
i 、a
i┼1
(1<=i<n),a
i
称为a
i┼1
的直接______a
i┼1
称为a
i
的直
接______。

2.线性结构的基本特征是:若至少含有一个结点,则除起始结点没有直接______外,其他结点有且仅有一个直接______;除终端结点没有直接______外,其它结点有且仅有一个直接______.
3.表长为O的线性表称为______
4.线性表典型的基本运算包括:______、______、______、______、______、______等六种。

5.顺序表的类型定义可经编译转换为机器级。

假定每个datatype类型的变量占用k(k>=1)个内存单元,其中,b是顺序表的第一个存储结点的第一个单元的内存地址,那么,第i个结点a
i
的存储地址为______。

6.以下为顺序表的插入运算,分析算法,请在______处填上正确的语句。

Void insert_sqlist(sqlist L,datatype x,int i)
/*将X插入到顺序表L的第i-1个位置*/
{ if( st == maxsize) error(“表满”);
if((i<1)||(i>st+1))error(“非法位置”);
for(j=st;j>=i;j--)______;
L.data[i-1]=x;
st=st+1;
}
7.对于顺序表的插入算法insert_sqlist来说,若以结点移动为标准操作,则插入算法的最坏时间复杂性为________,量级是________。

插入算法的平均时间复杂性为________,平均时间复杂性量级是________。

8.以下为顺序表的删除运算,分析算法,请在________处填上正确的语句。

void delete_sqlist(sqlist L,int i) /*删除顺序表L中的第i-1个位置上的结点*/ {if((i<1)||(i>st))error(“非法位置”);
for(j=i+1;j=st;j++)________;
st=st-1;
}
9.对于顺序表的删除算法delete_sqlist来说,若以结点移动为标准操作,最坏情况时间复杂性及其量级分别是________和________,其平均时间复杂性及其量级分别为________和________。

n O(n) n/2 O(n)
10.以下为顺序表的定位运算,分析算法,请在________处填上正确的语句。

int locate_sqlist(sqlist L,datatype X)
/*在顺序表L中查找第一值等于X的结点。

若找到回传该结点序号;否则回传0*/ {________; i=1 i≦st
while((i≤st)&&(L.data[i-1]!=X))i++;
if(________)return(i);
else return(0);
}
11.在单链表中,表结点中的第一个和最后一个分别称为________和________。

头结点的数据域可以不存储________,也可以存放一个________或________。

首结点尾结点任何信息、特殊标志表长
12.以下为求单链表表长的运算,分析算法,请在 ________处填上正确的语句。

int length_lklist(lklist head) /*求表head的长度*/
{________; p=haed p=p->next
j=0;
while(p->next!=NULL)
{________________;
j++;
}
return(j); /*回传表长*/
}
13.以下为单链表按序号查找的运算,分析算法,请在____处填上正确的语句。

pointer find_lklist(lklist head,int i)
{ p=head;j=0; (p->next!=NULL)&&(j<I)
while(________________)
{ p=p->next; j++; }
if(i==j) return(p);
else return(NULL);
}
14.以下为单链表的删除运算,分析算法,请在____处填上正确的语句。

void delete_lklist(lklist head,int i)
{ p=find_lklist(head,i-1);
if(____________________________)
{ q=________________;
p->next=p->next;
free(q);
}
else error(“不存在第i个结点”)
}(p!=NULL)&&(p->next!=NULL) p->next
15.以下为单链表的插入运算,分析算法,请在____处填上正确的语句。

void insert_lklist(lklist head,datatype x,int i)
/*在表head的第i个位置上插入一个以x为值的新结点*/
{ p=find_lklist(head,i-1);
if(p==NULL)error(“不存在第i个位置”);
else {s=________________;s->data=x;
s->next=________________;
p->next=s;
}
} mailloc(size) p->next
16.以下为单链表的建表算法,分析算法,请在____处填上正确的语句。

lklist create_lklist2() /*直接实现的建表算法。

*/ { head=malloc(size);
p=head;
scanf(“%f”,&x);
while(x!=’$’)
{ q=malloc(size);
q->data=x;
p->next=q;
________________;
scanf(“%f”,&x);
}
________________;
return(head);
}
此算法的量级为________________。

p=q p->next=NULL O(n)。

相关主题