数据结构Word文档格式.docx
《数据结构Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构Word文档格式.docx(12页珍藏版)》请在冰豆网上搜索。
![数据结构Word文档格式.docx](https://file1.bdocx.com/fileroot1/2023-1/23/ee5220cb-4996-4d7a-9640-ba55c9e68f12/ee5220cb-4996-4d7a-9640-ba55c9e68f121.gif)
return1;
//插入成功
}
直接选择排序的算法
voidSelectSort(datalist<
&
list)
{
for(inti=0;
i<
list.CurrentSize-1;
i++)
____SelectExchange(list,i)____________________;
}
viodSelectExchange(datalist<
list,constinti){
intk=i;
for(intj=i+1;
j<
list.CurrentSize;
j++)
if(list.Vector[j].getKey()<
list.Vector[k].getKey())
___
_____k=i_____________;
//当前具有最小关键码的对象
if(k!
=i)Swap(list.Vector[i],list.Vector[k]);
//交换
3、删去链表中除表头结点外的所有其他结点
voidList<
:
MakeEmpty(){
ListNode<
*q;
while(first→link!
=NULL){
_______q=first->
link
___________________;
__________first->
link=q->
link________________;
//将表头结点后第一个结点从链中摘下
deleteq;
//释放它
last=first;
//修改表尾指针
}
4、基于有序顺序表的折半搜索递归算法(Element为有序顺序表)
intorderedList<
BinarySearch(constType&
x,constintlow,constinthigh)const
{
intmid=-1;
if(low<
=high){
________mid=(low+high)/2__________________;
if(Element[mid].getKey()<
x)
mid=BinarySearch(______x,mid+1,high____________________);
elseif(Element[mid].getKey()>
x)
mid=BinarySearch(x,low,mid-1);
returnmid;
5、在顺序表中第
i
个位置插入新元素
x
。
intinsert(sqlist*L,datatypex,inti)
{intj;
if(L->
n==maxsize)
{cout<
<
”表满,不能插入!
(上溢)\n”;
return–1;
if(
i<
=maxsize_____________
)
”非法插入位置!
\n”;
return0;
for(j=L->
n;
=i;
L->
data[j]=L->
data[j-1];
//节点后移
______
data[j]=x__________
;
//插入x
n++;
//修改表长
Return1;
6、直接选择排序的算法
voidSelectSort(listR,intn)
{inti,j,k;
for(i=1;
=n-1;
i++)
//n-1趟排序
_____k=i____________
for(j=i+1;
=n,j++)
//在当前无序区中找键值最小的记录R[k]
if(R[j].key<
R[k].key)
______k=j___________
=i)
{R[0]=R[i];
R[i]=R[k];
R[k]=R[0];
二、简答题
1.线性表可用顺序表或是链表存储,此两种存储表示各有哪些优缺点?
答:
顺序存储表示是将数据元素存放于一个连续的存储空间中,实现顺序存取或(按下标)直接存取。
它的存储效率高,存取速度快。
但它的空间大小一经定义,在程序整个运行期间不会发生改变,因此,不易扩充。
同时,由于在插入或删除时,为保持原有次序(没有规定元素进栈顺序),平均需要移动一半(或近一半)元素,修改效率不高。
链接存储表示的存储空间一般在程序的运行过程中动态分配和释放,且只要存储器中还有空间,就不会产生存储溢出的问题。
同时在插入和删除时不需要保持数据元素原来的物理顺序,只需要保持原来的逻辑顺序,因此不必移动数据,只需修改它们的链接指针,修改效率较高。
但存取表中的数据元素时,只能循链顺序访问,因此存取效率不高。
2.设有一个输入数据的序列是{46,25,78,62,12,37,70,29},试画出从空树起,逐个输入各个数据而生成的二叉搜索树。
3.用广义表的带表头结点的存储表示法表示下列集合。
A=()
B=(6,2)
C=(‘a’,(5,3,
‘x’))
D=(B,C,A)
E=(B,D)
4.上图所示为一有向图,请给出该图的下述要求:
(1)给出每个顶点的入度和出度;
顶点
1
2
3
4
5
6
入度
出度
(2)以结点3为起始结点,分别画出该图的一个深度优先生成树和一个宽度优先生成树;
深度优先:
宽度优先:
(3)给出该图的邻接矩阵;
(4)给出该图的邻接表;
邻接表
5.
对于如上图所示的有向图,试写出:
(1)
从顶点①出发进行深度优先搜索所得到的深度优先生成树;
(2)
从顶点②出发进行广度优先搜索所得到的广度优先生成树;
6.已知二叉树的先序、中序和后序序列分别如下,但其中有一些已模糊不清,试构造出该二叉树。
先序序列 _BC_EF__
中序序列 BDE_AG_H
后序序列 _DC_GH_A
通过后序最后一个是A,这可得到:
先序序列ABC_EF_
先序的第二个元素是B,所以B是A的左子树根节点,由中序B在最前,知道其他元素都在B的右子树上,所以,转成后序序列为(DE_)B(G_H)A,对比已有的后序序列_DC_GH_A
得后序序列为:
EDCBGHFA,中序序列为:
BDECAGFH
所以二叉树为:
7.分析下列两个程序段的运行时间(时间复杂度)。
void
mystery(intn)
inti,j,k;
for(i=1;
i<
n;
i++)
for(j=i+1;
j<
=n;
j++)
for(k=1;
k<
=j;
k++);
答:
时间复杂度:
O(n^3)
odd(intn)
inti,j,x=0,y=0;
ifodd(i)
for(j=i;
j++)
x++;
for(j=1;
=i;
y++;
O(n^2)
8.有一组数据:
25,50,70,21,4,18,100,43,7,12。
现采用汽泡排序算法进行排序,写出每趟排序的结果,并标明第一趟数据的移动情况。
第一趟:
25,50,70,21,4,18,100,43,7,12
25,50,21,70,4,18,100,43,7,12
25,50,21,4,70,18,100,43,7,12
25,50,21,4,18,70,100,43,7,12
25,50,21,4,18,70,43,100,7,12
25,50,21,4,18,70,43,7,100,12
25,50,21,4,18,70,43,7,12,100
第二趟:
25,21,4,18,50,43,7,12,70,100
第三趟:
21,4,18,25,43,7,12,50,70,100
第四趟:
4,18,21,25,7,12,43,50,70,100
第五趟:
4,18,21,7,12,25,43,50,70,100
第六趟:
4,18,7,12,21,25,43,50,70,100
第七趟:
4,7,12,18,21,25,43,50,70,100