A. 數據結構「查找」問題求老師解決。
查找表結構:以順序表或線性鏈表表示
. 基本思想:從一端開始向另一端,逐個進行記錄的關鍵字
和給定值的比較,若某個記錄的關鍵字和給定值比較相等,
11/103
則查找成功;反之,若直至另一端,其關鍵字和給定值比
較都不等,則表明表中沒有所查記錄,查找不成功。
查找成功示例:
(34, 44, 43, 12, 53, 55,73, 64, 77),key = 64
查找不成功示例:
(34, 44, 43, 12, 53, 55,73, 64, 77),key = 88
對順序表的順序查找
typedef struct{
ElemType *elem; //數據元素存儲空間基址
12/103
int length; //表長度
}SSTable;
對順序表的順序查找
int Search_Seq(SSTable ST, KeyType key) {
// 在順序表ST中順序查找其關鍵字等於key的數據元素。
// 若找到則函數值為該元素在表中的位置否則為0
13/103
,,。
ST.elem[0].key = key; // 「哨兵」
// 從後往前找
for (i=ST.length; ST.elem[i].key!=key; --i);
return i; //找不到時,i為0
} // Search_Seq
哨兵的作用:免去查找過程中每一步都要檢測整個表是
否查找完畢。
B. 數據結構問題:如何在線性表中查找值為X的數據元素
要函數嗎?
查找以後怎麼返回呢?
你是想查到就返回1沒查到就返回0
還是直接返回這個元素?
int
Find(LinkList
L,int
x)
{
LinkList
p;
p=
L->next;
while(p!=NULL)
{
if(p->data==x)
return
x;
p=p->next;
}
printf("找不到");
}
不知道你指的值是指哪個,是x還是x所在的那個結構體。
C. 有關數據結構問題
當然很有用啦,特別是在資料庫的構建中。
D. 數據結構的問題 求步驟和思路
二叉樹的前序序列是樹根在前面,中序序列裡面樹根在中間。
邏輯是重復的按照,先通過前序確定樹根,再通過中序確定左右子樹。
前序ABDGCEF中DGBAECF。可以看出樹根是,A。
推出左樹的前序BDG中序DGB;右樹的前序是CEF中序是ECF;
接著分別找出左樹的樹根和左右子樹,右樹的樹根和左右子樹。
如下遞歸處理,既可以搞定。
訣竅就是『先通過前序確定樹根,再通過中序確定左右子樹』
E. 高手請進,數據結構問題,尋找最優最全的演算法
把你這些數據全部導入一個資料庫,幾個SQL幾下就得出結果了。
F. 數據結構的查找問題,謝謝
我覺得是A
這樣使塊數和每塊記錄數相等
最壞情況下的查找數是100
(最後一塊的最後一個記錄)
G. 數據結構的查找的方法有哪幾類,每類有哪些方法,方法的特點是什麼
1、評價一個演算法時間性能的主要標準是(演算法的時間復雜度)。
2、演算法的時間復雜度與問題的規模有關外,還與輸入實例的(初始狀態)有關。
3、一般,將演算法求解問題的輸入量稱為(問題的規模)。
4、在選擇演算法時,除首先考慮正確性外,還應考慮哪三點?
答:選用的演算法首先應該是"正確"的。此外,主要考慮如下三點:① 執行演算法所耗費的時間;② 執行演算法所耗費的存儲空間,其中主要考慮輔助存儲空間;③ 演算法應易於理解,易於編碼,易於調試等等。
6、下列四種排序方法中,不穩定的方法是(D )
A、直接插入排序B、冒泡排序C、歸並排序D、直接選擇排序
7、按增長率由小至大的順序排列下列各函數:
2100, (3/2)n,(2/3)n,nn ,n0.5 , n! ,2n ,lgn ,nlgn, n3/2
H. 數據結構的查找方法
1.順序查找
2.二分查找
3.分塊查找
4.二叉排序樹查找
5.哈希查找
I. C語言 數據結構 文件及查找問題
關鍵字序列是{22,41,53,8,46,30,1,31,66},計算過程如下:
插入關鍵字22,索引(散列值)=3*22mod11=0,存入散列表:
下標012345678910
關鍵字22
插入關鍵字41,索引(散列值)=3*41mod11=2,存入散列表:
下標012345678910
關鍵字2241
插入關鍵字53,索引(散列值)=3*53mod11=5,存入散列表:
下標012345678910
關鍵字224153
插入關鍵字8,索引(散列值)=3*8mod11=2,有沖突,取索引2+1=3,沒有沖突,存入散列表:
下標012345678910
關鍵字2241853
插入關鍵字46,索引(散列值)=3*46mod11=6,存入散列表:
下標012345678910
關鍵字224185346
插入關鍵字30,索引(散列值)=3*30mod11=2,有沖突,取索引2+1=3,仍有沖突,
取索引3+1=4,沒有沖突,存入散列表:
下標012345678910
關鍵字22418305346
插入關鍵字1,索引(散列值)=3*1mod11=3,有沖突,依次取索引4,5,6,均有沖突,
取索引7,沒有沖突,存入散列表:
下標012345678910
關鍵字224183053461
插入關鍵字31,索引(散列值)=3*31mod11=5,有沖突,依次取索引6,7,均有沖突,
取索引8,沒有沖突,存入散列表:
下標012345678910
關鍵字22418305346131
插入關鍵字66,索引(散列值)=3*66mod11=0,有沖突,取索引0+1=1,沒有沖突,存入散列表:
下標012345678910
關鍵字2266418305346131
這就是最後得到的散列表.
//C語言測試程序
#include<stdio.h>
#include<stdlib.h>
#defineSUCCESS1
#defineUNSUCCESS0
#defineHASHSIZE11
#defineNULLKEY-1
typedefintStatus;
typedefstruct
{
int*elem;
intcount;
}HashTable;
intm=0;
StatusInitHashTable(HashTable*H)
{
inti;
m=HASHSIZE;
H->count=m;
H->elem=(int*)malloc(m*sizeof(int));
for(i=0;i<m;i++)
{
H->elem[i]=NULLKEY;
}
returnSUCCESS;
}
intHash(intkey)
{
return(3*key)%m;
}
voidInsertHash(HashTable*H,intkey)
{
intaddr;
intpos;
pos=Hash(key);
addr=pos;
while(H->elem[addr]!=NULLKEY)
{
////////
printf("索引=%d有沖突. ",addr);
////////
addr=(addr+1)%m;
if(addr==pos)
{
printf(" 散列表已滿! ");
exit(1);
}
}
H->elem[addr]=key;
}
StatusSearchHash(HashTableH,intkey,int*addr)
{
*addr=Hash(key);
while(H.elem[*addr]!=key)
{
*addr=(*addr+1)%m;
if(H.elem[*addr]==NULLKEY||*addr==Hash(key))
{
returnUNSUCCESS;
}
}
returnSUCCESS;
}
voidshowHashTable(HashTable*H)
{
inti;
for(i=0;i<H->count;i++)
{
printf("%4d",i);
}
printf(" ");
for(i=0;i<H->count;i++)
{
if(H->elem[i]==NULLKEY)
{
printf("%4c",0x20);
}
else
{
printf("%4d",H->elem[i]);
}
}
printf(" ");
}
intmain()
{
intkey[]={22,41,53,8,46,30,1,31,66};
intlen;
inti;
HashTableH;
InitHashTable(&H);
len=sizeof(key)/sizeof(key[0]);
for(i=0;i<len;i++)
{
printf("插入關鍵字%d,索引(Hash)=%d ",key[i],Hash(key[i]));
InsertHash(&H,key[i]);
showHashTable(&H);
}
return0;
}
J. 數據結構問題
1.由同一關鍵字集合構造的各棵二叉排序樹的形態,平均查找長度相同嗎?為什麼?
對於含有同樣一組結點的表,由於結點插入的先後次序不同,所構成的二叉排序樹的形態和深度也可能不同。
在二叉排序樹上進行查找時的平均查找長度和二叉樹的形態有關:
①在最壞情況下,二叉排序樹是通過把一個有序表的n個結點依次插入而生成的,此時所得的二叉排序樹蛻化為棵深度為n的單支樹,它的平均查找長度和單鏈表上的順序查找相同,亦是(n+1)/2。
②在最好情況下,二叉排序樹在生成的過程中,樹的形態比較勻稱,最終得到的是一棵形態與二分查找的判定樹相似的二叉排序樹,此時它的平均查找長度大約是lgn。
③插入、刪除和查找演算法的時間復雜度均為O(lgn)。
------
譬如:關鍵字:10 10 10 10
10 10
10 或 10 10 或 ...
10 10
10
------
2.由關鍵碼10,20,30,40的四個結點能構造出多少二叉排序樹,怎麼計算的
二叉排序樹 共16種
avl樹共4種
完全二叉樹共1種
圖不太好畫,你驗證驗證看看吧。