版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
經(jīng)典數(shù)據(jù)結(jié)構(gòu)面試題(含答案)經(jīng)典數(shù)據(jù)結(jié)構(gòu)面試題(含答案)經(jīng)典數(shù)據(jù)結(jié)構(gòu)面試題(含答案)xxx公司經(jīng)典數(shù)據(jù)結(jié)構(gòu)面試題(含答案)文件編號:文件日期:修訂次數(shù):第1.0次更改批準(zhǔn)審核制定方案設(shè)計,管理制度棧和隊列的共同特點是__________________________.棧通常采用的兩種存儲結(jié)構(gòu)是______________________.用鏈表表示線性表的優(yōu)點是_______________________
8.在單鏈表中,增加頭結(jié)點的目的是___________________
9.循環(huán)鏈表的主要優(yōu)點是________________________-12.線性表的順序存儲結(jié)構(gòu)和線性表的鏈?zhǔn)酱鎯Y(jié)構(gòu)分別是__________________________
13.樹是結(jié)點的集合,它的根結(jié)點數(shù)目是_____________________
14.在深度為5的滿二叉樹中,葉子結(jié)點的個數(shù)為_______________
15.具有3個結(jié)點的二叉樹有(_____________________16.設(shè)一棵二叉樹中有3個葉子結(jié)點,有8個度為1的結(jié)點,則該二叉樹中總的結(jié)點數(shù)為____________________
17.已知二叉樹后序遍歷序列是dabec,中序遍歷序列是debac,它的前序遍歷序列是____________________________
18.已知一棵二叉樹前序遍歷和中序遍歷分別為ABDEGCFH和DBGEACHF,則該二叉樹的后序遍歷為______________________
19.若某二叉樹的前序遍歷訪問順序是abdgcefh,中序遍歷訪問順序是dgbaechf,則其后序遍歷的結(jié)點訪問順序是_______________________20.數(shù)據(jù)庫保護(hù)分為:安全性控制、完整性控制、并發(fā)性控制和數(shù)據(jù)的恢復(fù)。在計算機中,算法是指_______________________算法一般都可以用哪幾種控制結(jié)構(gòu)組合而成_____________________.算法的時間復(fù)雜度是指______________________
5.算法的空間復(fù)雜度是指__________________________
6.算法分析的目的是__________________________11.數(shù)據(jù)的存儲結(jié)構(gòu)是指_________________________
12.數(shù)據(jù)的邏輯結(jié)構(gòu)是指(_______________________________
13.根據(jù)數(shù)據(jù)結(jié)構(gòu)中各數(shù)據(jù)元素之間前后件關(guān)系的復(fù)雜程度,一般將數(shù)據(jù)結(jié)構(gòu)分為__________________________________16.遞歸算法一般需要利用_______________________實現(xiàn)。
28.非空的循環(huán)單鏈表head的尾結(jié)點(由p所指向),滿足(_____________________
29.與單向鏈表相比,雙向鏈表的優(yōu)點之一是____________________________--
34.在一棵二叉樹上第8層的結(jié)點數(shù)最多是____________35.在深度為5的滿二叉樹中,葉子結(jié)點的個數(shù)為____________\36.在深度為5的滿二叉樹中,共有________________個結(jié)點
37.設(shè)一棵完全二叉樹共有699個結(jié)點,則在該二叉樹中的葉子結(jié)點數(shù)為_________________說明:完全二叉樹總結(jié)點數(shù)為N,若N為奇數(shù),則葉子結(jié)點數(shù)為(N+1)/2;若N為偶數(shù),則葉子結(jié)點數(shù)為N/2。
39.已知二叉樹后序遍歷序列是dabec,中序遍歷序列debac,它的前序遍歷序列是(cedba)40.已知一棵二叉樹前序遍歷和中序遍歷分別為ABDEGCFH和DBGEACHF,則該二叉樹的后序遍歷為(DGEBHFCA)
41.若某二叉樹的前序遍歷訪問順序是abdgcefh,中序遍歷訪問順序是dgbaechf,則其后序遍歷的結(jié)點訪問順序是(gdbehfca)42.串的長度是(串中所含字符的個數(shù))43.設(shè)有兩個串p和q,求q在p中首次出現(xiàn)位置的運算稱做(模式匹配)
44.N個頂點的連通圖中邊的條數(shù)至少為(N-1)
個頂點的強連通圖的邊數(shù)至少有(N)
46.對長度為n的線性表進(jìn)行順序查找,在最壞情況下所需要的比較次數(shù)為(N)47.最簡單的交換排序方法是(冒泡排序)48.假設(shè)線性表的長度為n,則在最壞情況下,冒泡排序需要的比較次數(shù)為(n(n-1)/2)49.在待排序的元素序列基本有序的前提下,效率最高的排序方法是(冒泡排序)50.在最壞情況下,下列順序方法中時間復(fù)雜度最小的是(堆排序)
51.希爾排序法屬于(插入類排序)52.堆排序法屬于(選擇類排序)53.在下列幾種排序方法中,要求內(nèi)存量最大的是(歸并排序)
54.已知數(shù)據(jù)表A中每個元素距其最終位置不遠(yuǎn),為節(jié)省時間,應(yīng)采用(直接插入排序)
55.算法的基本特征是可行性、確定性、有窮性
和擁有足夠的情報。一個算法通常由兩種基本要素組成:一是對數(shù)據(jù)對象的運算和操作,二是算法的控制結(jié)構(gòu)。1.算法的復(fù)雜度主要包括時間復(fù)雜度和空間復(fù)雜度。2.實現(xiàn)算法所需的存儲單元多少和算法的工作量大小分別稱為算法的空間復(fù)雜度和時間復(fù)雜度。3.所謂數(shù)據(jù)處理是指對數(shù)據(jù)集合中的各元素以各種方式進(jìn)行運算,包括插入、刪除、查找、更改等運算,也包括對數(shù)據(jù)元素進(jìn)行分析。
4.數(shù)據(jù)結(jié)構(gòu)是指相互有關(guān)聯(lián)的數(shù)據(jù)元素的集合。
5.數(shù)據(jù)結(jié)構(gòu)分為邏輯結(jié)構(gòu)與存儲結(jié)構(gòu),線性鏈表屬于存儲結(jié)構(gòu)。6.數(shù)據(jù)結(jié)構(gòu)包括數(shù)據(jù)的邏輯結(jié)構(gòu)和數(shù)據(jù)的存儲結(jié)構(gòu)。7.數(shù)據(jù)結(jié)構(gòu)包括數(shù)據(jù)的邏輯結(jié)構(gòu)、數(shù)據(jù)的存儲結(jié)構(gòu)以及對數(shù)據(jù)的操作運算。8.數(shù)據(jù)元素之間的任何關(guān)系都可以用前趨和后繼關(guān)系來描述。9.數(shù)據(jù)的邏輯結(jié)構(gòu)有線性結(jié)構(gòu)和非線性結(jié)構(gòu)兩大類。
10.常用的存儲結(jié)構(gòu)有順序、鏈接、索引等存儲結(jié)構(gòu)。
11.順序存儲方法是把邏輯上相鄰的結(jié)點存儲在物理位置
相鄰的存儲單元中。12.棧的基本運算有三種:入棧、退棧與讀棧頂元素。13.隊列主要有兩種基本運算:入隊運算與退隊運算。14.在實際應(yīng)用中,帶鏈的??梢杂脕硎占嬎銠C存儲空間中所有空閑的存儲結(jié)點,這種帶鏈的棧稱為可利用棧。15.棧和隊列通常采用的存儲結(jié)構(gòu)是鏈?zhǔn)酱鎯晚樞虼鎯?/p>
。16.當(dāng)線性表采用順序存儲結(jié)構(gòu)實現(xiàn)存儲時,其主要特點是邏輯結(jié)構(gòu)中相鄰的結(jié)點在存儲結(jié)構(gòu)中仍相鄰。17.循環(huán)隊列主要有兩種基本運算:入隊運算與退隊運算。每進(jìn)行一次入隊運算,隊尾指針就進(jìn)1。
18.當(dāng)循環(huán)隊列非空且隊尾指針等于對頭指針時,說明循環(huán)隊列已滿,不能進(jìn)行入隊運算。這種情況稱為上溢
。19.當(dāng)循環(huán)隊列為空時,不能進(jìn)行退隊運算,這種情況稱為下溢。
20.在一個容量為25的循環(huán)隊列中,若頭指針front=16,尾指針rear=9,則該循環(huán)隊列中共有18個元素。注:當(dāng)rear<front時,元素個數(shù)=總?cè)萘浚╢ront-rear);當(dāng)rear>front時,元素個數(shù)=rear-front。5.下列關(guān)于棧的敘述正確的是(D)
A.棧是非線性結(jié)構(gòu)B.棧是一種樹狀結(jié)構(gòu)C.棧具有先進(jìn)先出的特征D.棧有后進(jìn)先出的特征6.鏈表不具有的特點是(B)A.不必事先估計存儲空間
B.可隨機訪問任一元素C.插入刪除不需要移動元素
D.所需空間與線性表長度成正比10.線性表L=(a1,a2,a3,……ai,……an),下列說法正確的是(D)
A.每個元素都有一個直接前件和直接后件
B.線性表中至少要有一個元素
C.表中諸元素的排列順序必須是由小到大或由大到小
D.除第一個和最后一個元素外,其余每個元素都有一個且只有一個直接前件和直接后件11.線性表若采用鏈?zhǔn)酱鎯Y(jié)構(gòu)時,要求內(nèi)存中可用存儲單元的地址(D)A.必須是連續(xù)的B.部分地址必須是連續(xù)的C.一定是不連續(xù)的D.連續(xù)不連續(xù)都可以
7.下列敘述正確的是(C)
A.算法的執(zhí)行效率與數(shù)據(jù)的存儲結(jié)構(gòu)無關(guān)
B.算法的空間復(fù)雜度是指算法程序中指令(或語句)的條數(shù)
C.算法的有窮性是指算法必須能在執(zhí)行有限個步驟之后終止
D.算法的時間復(fù)雜度是指執(zhí)行算法程序所需要的時間
8.數(shù)據(jù)結(jié)構(gòu)作為計算機的一門學(xué)科,主要研究數(shù)據(jù)的邏輯結(jié)構(gòu)、對各種數(shù)據(jù)結(jié)構(gòu)進(jìn)行的運算,以及(數(shù)據(jù)的存儲結(jié)構(gòu))
9.數(shù)據(jù)結(jié)構(gòu)中,與所使用的計算機無關(guān)的是數(shù)據(jù)的(C)
A.存儲結(jié)構(gòu)
B.物理結(jié)構(gòu)
C.邏輯結(jié)構(gòu)
D.物理和存儲結(jié)構(gòu)
10.下列敘述中,錯誤的是(B)
A.?dāng)?shù)據(jù)的存儲結(jié)構(gòu)與數(shù)據(jù)處理的效率密切相關(guān)
B.?dāng)?shù)據(jù)的存儲結(jié)構(gòu)與數(shù)據(jù)處理的效率無關(guān)
C.?dāng)?shù)據(jù)的存儲結(jié)構(gòu)在計算機中所占的空間不一定是連續(xù)的
D.一種數(shù)據(jù)的邏輯結(jié)構(gòu)可以有多種存儲結(jié)構(gòu)
14.下列數(shù)據(jù)結(jié)構(gòu)具有記憶功能的是(C)A.隊列B.循環(huán)隊列C.棧D.順序表
15.下列數(shù)據(jù)結(jié)構(gòu)中,按先進(jìn)后出原則組織數(shù)據(jù)的是(B)
A.線性鏈表
B.棧
C.循環(huán)鏈表
D.順序表
17.下列關(guān)于棧的敘述中正確的是(D)A.在棧中只能插入數(shù)據(jù)B.在棧中只能刪除數(shù)據(jù)C.棧是先進(jìn)先出的線性表
D.棧是先進(jìn)后出的線性表20.由兩個棧共享一個存儲空間的好處是(節(jié)省存儲空間,降低上溢發(fā)生的機率)21.應(yīng)用程序在執(zhí)行過程中,需要通過打印機輸出數(shù)據(jù)時,一般先形成一個打印作業(yè),將其存放在硬盤中的一個指定(隊列)中,當(dāng)打印機空閑時,就會按先來先服務(wù)的方式從中取出待打印的作業(yè)進(jìn)行打印。22.下列關(guān)于隊列的敘述中正確的是(C)A.在隊列中只能插入數(shù)據(jù)B.在隊列中只能刪除數(shù)據(jù)
C.隊列是先進(jìn)先出的線性表
D.隊列是先進(jìn)后出的線性表23.下列敘述中,正確的是(D)A.線性鏈表中的各元素在存儲空間中的位置必須是連續(xù)的B.線性鏈表中的表頭元素一定存儲在其他元素的前面C.線性鏈表中的各元素在存儲空間中的位置不一定是連續(xù)的,但表頭元素一定存儲在其他元素的前面D.線性鏈表中的各元素在存儲空間中的位置不一定是連續(xù)的,且各元素的存儲順序也是任意的24.下列敘述中正確的是(A)A.線性表是線性結(jié)構(gòu)
B.棧與隊列是非線性結(jié)構(gòu)C.線性鏈表是非線性結(jié)構(gòu)
D.二叉樹是線性結(jié)構(gòu)25.線性表L=(a1,a2,a3,……ai,……an),下列說法正確的是(D)A.每個元素都有一個直接前件和直接后件
B.線性表中至少要有一個元素C.表中諸元素的排列順序必須是由小到大或由大到小D.除第一個元素和最后一個元素外,其余每個元素都有一個且只有一個直接前件和直接后件26.線性表若采用鏈?zhǔn)酱鎯Y(jié)構(gòu)時,要求內(nèi)存中可用存儲單元的地址(連續(xù)不連續(xù)都可以)27.鏈表不具有的特點是(B)A.不必事先估計存儲空間
B.可隨機訪問任一元素C.插入刪除不需要移動元素
D.所需空間與線性表長度成正比
30.在(D)中,只要指出表中任何一個結(jié)點的位置,就可以從它出發(fā)依次訪問到表中其他所有結(jié)點。A.線性單鏈表
B.雙向鏈表
C.線性鏈表
D.循環(huán)鏈表31.以下數(shù)據(jù)結(jié)構(gòu)屬于非線性數(shù)據(jù)結(jié)構(gòu)的是(C)A.隊列
B.線性表C.二叉樹
D.棧
38.設(shè)有下列二叉樹,對此二叉樹中序遍歷的結(jié)果是(B)A.ABCDEF
B.DBEAFCC.ABDECF
D.DEBFCA1.判斷鏈表是否存在環(huán)型鏈表問題:判斷一個鏈表是否存在環(huán),例如下面這個鏈表就存在一個環(huán):例如N1->N2->N3->N4->N5->N2就是一個有環(huán)的鏈表,環(huán)的開始結(jié)點是N5這里有一個比較簡單的解法。設(shè)置兩個指針p1,p2。每次循環(huán)p1向前走一步,p2向前走兩步。直到p2碰到NULL指針或者兩個指針相等結(jié)束循環(huán)。如果兩個指針相等則說明存在環(huán)。structlink{
intdata;
link*next;};boolIsLoop(link*head){
link*p1=head,*p2=head;
if(head==NULL||head->next==NULL)
{
returnfalse;
}
do{
p1=p1->next;
p2=p2->next->next;
}while(p2&&p2->next&&p1!=p2);
if(p1==p2)
returntrue;
else
returnfalse;}2,鏈表反轉(zhuǎn)單向鏈表的反轉(zhuǎn)是一個經(jīng)常被問到的一個面試題,也是一個非常基礎(chǔ)的問題。比如一個鏈表是這樣的:1->2->3->4->5通過反轉(zhuǎn)后成為5->4->3->2->1。最容易想到的方法遍歷一遍鏈表,利用一個輔助指針,存儲遍歷過程中當(dāng)前指針指向的下一個元素,然后將當(dāng)前節(jié)點元素的指針反轉(zhuǎn)后,利用已經(jīng)存儲的指針往后面繼續(xù)遍歷。源代碼如下:structlinka{
intdata;
linka*next;};voidreverse(linka*&head){
if(head==NULL)
return;
linka*pre,*cur,*ne;
pre=head;
cur=head->next;
while(cur)
{
ne=cur->next;
cur->next=pre;
pre=cur;
cur=ne;
}
head->next=NULL;
head=pre;}還有一種利用遞歸的方法。這種方法的基本思想是在反轉(zhuǎn)當(dāng)前節(jié)點之前先調(diào)用遞歸函數(shù)反轉(zhuǎn)后續(xù)節(jié)點。源代碼如下。不過這個方法有一個缺點,就是在反轉(zhuǎn)后的最后一個結(jié)點會形成一個環(huán),所以必須將函數(shù)的返回的節(jié)點的next域置為NULL。因為要改變head指針,所以我用了引用。算法的源代碼如下:linka*reverse(linka*p,linka*&head){
if(p==NULL||p->next==NULL)
{
head=p;
returnp;
}
else
{
linka*tmp=reverse(p->next,head);
tmp->next=p;
returnp;
}}3,判斷兩個數(shù)組中是否存在相同的數(shù)字給定兩個排好序的數(shù)組,怎樣高效得判斷這兩個數(shù)組中存在相同的數(shù)字?這個問題首先想到的是一個O(nlogn)的算法。就是任意挑選一個數(shù)組,遍歷這個數(shù)組的所有元素,遍歷過程中,在另一個數(shù)組中對第一個數(shù)組中的每個元素進(jìn)行binarysearch。用C++實現(xiàn)代碼如下:boolfindcommon(inta[],intsize1,intb[],intsize2){
inti;
for(i=0;i<size1;i++)
{
intstart=0,end=size2-1,mid;
while(start<=end)
{
mid=(start+end)/2;
if(a[i]==b[mid])
returntrue;
elseif(a[i]<b[mid])
end=mid-1;
else
start=mid+1;
}
}
returnfalse;}后來發(fā)現(xiàn)有一個O(n)算法。因為兩個數(shù)組都是排好序的。所以只要一次遍歷就行了。首先設(shè)兩個下標(biāo),分別初始化為兩個數(shù)組的起始地址,依次向前推進(jìn)。推進(jìn)的規(guī)則是比較兩個數(shù)組中的數(shù)字,小的那個數(shù)組的下標(biāo)向前推進(jìn)一步,直到任何一個數(shù)組的下標(biāo)到達(dá)數(shù)組末尾時,如果這時還沒碰到相同的數(shù)字,說明數(shù)組中沒有相同的數(shù)字。boolfindcommon2(inta[],intsize1,intb[],intsize2){
inti=0,j=0;
while(i<size1&&j<size2)
{
if(a[i]==b[j])
returntrue;
if(a[i]>b[j])
j++;
if(a[i]<b[j])
i++;
}
returnfalse;}4,最大子序列問題:
給定一整數(shù)序列A1,A2,...An(可能有負(fù)數(shù)),求A1~An的一個子序列Ai~Aj,使得Ai到Aj的和最大
例如:
整數(shù)序列-2,11,-4,13,-5,2,-5,-3,12,-9的最大子序列的和為21。
對于這個問題,最簡單也是最容易想到的那就是窮舉所有子序列的方法。利用三重循環(huán),依次求出所有子序列的和然后取最大的那個。當(dāng)然算法復(fù)雜度會達(dá)到O(n^3)。顯然這種方法不是最優(yōu)的,下面給出一個算法復(fù)雜度為O(n)的線性算法實現(xiàn),算法的來源于ProgrammingPearls一書。在給出線性算法之前,先來看一個對窮舉算法進(jìn)行優(yōu)化的算法,它的算法復(fù)雜度為O(n^2)。其實這個算法只是對對窮舉算法稍微做了一些修改:其實子序列的和我們并不需要每次都重新計算一遍。假設(shè)Sum(i,j)是A[i]...A[j]的和,那么Sum(i,j+1)=Sum(i,j)+A[j+1]。利用這一個遞推,我們就可以得到下面這個算法:intmax_sub(inta[],intsize){
inti,j,v,max=a[0];
for(i=0;i<size;i++)
{
v=0;
for(j=i;j<size;j++)
{
v=v+a[j];constchar*reverse(constchar*s1,constchar*token)
{
assert(s1&&token);
stack<char>stack1;
constchar*ptoken=token,*head=s1,*rear=s1;
while(*head!='')
{
while(*head!=''&&*ptoken==*head)
{
ptoken++;
head++;
}
if(*ptoken=='')1,1,1,2,2,5,4,4,4,4,1,0--->1,2,5,4,1,0
voidstaticremove_duplicated(inta[],vector<int>&_st)
{
(a[0]);
for(inti=1;_st[()-1]!=0;i++)
{
if(a[i-1]!=a[i])
(a[i]);
}
}
當(dāng)然如果可以改變原來的數(shù)組的話,可以不用STL,僅需要指針操作就可以了。下面這個程序?qū)⑿薷脑瓉頂?shù)組的內(nèi)容。
voidstaticremove_duplicated2(inta[])
{
if(a[0]==0||a==NULL)
return;
intinsert=1,current=1;
while(a[current]!=0)
{
if(a[current]!=a[current-1])
{
a[insert]=a[current];
insert++;
current++;
}
else
current++;
}
a[insert]=0;
}
9,如何判斷一棵二叉樹是否是平衡二叉樹問題:判斷一個二叉排序樹是否是平衡二叉樹解決方案:
根據(jù)平衡二叉樹的定義,如果任意節(jié)點的左右子樹的深度相差不超過1,那這棵樹就是平衡二叉樹。
首先編寫一個計算二叉樹深度的函數(shù),利用遞歸實現(xiàn)。
template<typenameT>
staticintDepth(BSTreeNode<T>*pbs)
{
if(pbs==NULL)
return0;
else
{
intld=Depth(pbs->left);
intrd=Depth(pbs->right);
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- ML171-analog-1-生命科學(xué)試劑-MCE
- 家委會主任上任發(fā)言稿
- 2024年平安醫(yī)院建設(shè)工作總結(jié)
- xx公司環(huán)境污染事故應(yīng)急預(yù)案
- 三通一平工程施工設(shè)計方案
- 商場物業(yè)管理方案
- 班級德育課課程設(shè)計
- 食品安全發(fā)言稿
- 非遺少兒美術(shù)課程設(shè)計
- 自來水管道維修安裝合同
- 部編版《道德與法治》二年級上冊第9課《這些是大家的》課件(共50張課件)
- 知道智慧網(wǎng)課《科技倫理》章節(jié)測試答案
- 2024年納稅服務(wù)條線專業(yè)知識考試題庫(含答案)
- 高處作業(yè)吊籃危險源辨識及風(fēng)險評價表
- 全國高中青年數(shù)學(xué)教師優(yōu)質(zhì)課大賽一等獎《函數(shù)的單調(diào)性》課件
- 有機化學(xué):第一章 緒論
- 菏澤市公立醫(yī)療機構(gòu)基本情況一覽表
- 初中英語教研組活動記錄(經(jīng)典實用)
- 新生兒肌注-(經(jīng)典實用)
- 文獻(xiàn)計量統(tǒng)計操作步驟
- 藍(lán)光一體機調(diào)試手冊
評論
0/150
提交評論