資料結構與演算法(查詢)1

2021-06-27 06:52:15 字數 2036 閱讀 2575

演算法如下:

# define listsze 20

typedef struct

elemtype;

typedef struct

stable;

查詢過程:

int searchseq(stable st,keytype k)

//在順序表中查詢關鍵字等於k的元素,若找到則函式值為該元素在表中的位置,否則為0

asl=1/2(n+1)

演算法:int binsearch(stable st,keytype)

//在有序表中st中折半查詢器關鍵字等於key的元素,若找到則函式值為該元素在表中的位置

return(0); }

asl=log

2(n+1)-1

2.1 二叉排序樹

typedef struct node

bstnode,*bstee;

查詢演算法:

bstree searchbst(bstree bt, keytype key)

//在根指標bt所指二叉樹排列數中,查詢關鍵字等於key的元素,若查詢成功則返回指向該元素的指標,否則則返回空指標

2.2二叉排序樹的插入

演算法:void insertbst(bstree*bt,keytype key)

else

if(key<(*bt)->key)

insertbst(&((*bt)->lchild),key);

else if(key>(*bt)->key)

insertbst(&((*bt)->rchild),key); }

如果給定乙個元素序列,可以利用二叉樹排序的插入演算法,動態構造一棵二叉排序樹。

首先,將二叉排序樹初始化為一棵空樹,然後逐個讀入元素,每讀入乙個元素,就建立一

個新的結點,並插入到當前已生成的二叉排序樹中,即呼叫上述二叉排序樹的插入演算法將

新結點插入。假設keytype為整型,構造二叉排序樹的演算法如下:

void createbst(bstree *bt)

//從鍵盤輸入元素值,建立相應二叉排序樹

} 在二叉排序樹中刪除乙個結點,不能將該結點為根的子樹全部刪除,只能刪除該結點並使得二叉樹依然滿足二叉排序樹的性質。

設刪除的結點為p,結點p的雙親為f,並假設p是f的左孩子(右孩子)可分三種情況:

(1)p為葉結點,則可直接將其刪除:

f->lchild=null;free(p);

(2)p結點只有左子樹或右子樹,則p的左子樹或右子樹直接改為其雙親結點f的左子樹

f->lchild=p->lchild或f->lchild=p->rchild;

free(p);

(3)p既有左子樹也有右子樹

1>首先找到p結點在二叉排序樹中序遍歷序列中的直接前驅s結點(無右子樹),然後將p的左子樹改為f的左子樹,而將p的右子樹改為s的右子樹。

2>首先找到p結點在二叉排序樹中序遍歷序列中的直接前驅s結點,q為s結點的雙親。利用s結點的值代替p結點的值,原s結點的左子樹改為s結點

的雙親q的右子樹,再將s結點刪除。

三種方法綜合演算法如下:

bstree delbst(bstree bt,keytype k)

if(p==null) return bt;

if(p->lchild&&p->rchild) //左右子樹不為空

p->key=s->key;

if(q!=p) q->rchild=s->lchlid;

else q->lchild=s->lchild;

free(s);

else

else

if(!f) bt=p;

else

if(q==f->lchild) f->lchild=p;

else f->rchild=p;

free(q);

}return bt;

}

資料結構與演算法(查詢)

1 查詢表 用於查詢的資料集合,由同一型別的資料元素組成,經常進行的操作 2 靜態查詢表 無需動態修改查詢表的操作,都是靜態查詢表。適合的查詢方法有順序查詢 折半查詢 雜湊查詢。3 動態查詢表 需要動態插入或刪除的操作。適合的查詢方法有二叉排序樹查詢 雜湊查詢。4 關鍵字 資料元素中唯一表示該元素的...

資料結構與演算法 查詢演算法

1.線性查詢,從頭到尾去遍歷,找到符合的則返回 2.二分法查詢 前提 目標陣列有序 package math public class dichotomy int k new dichotomy show arr,8 system.out.println k public int show int ...

資料結構與演算法 查詢演算法

第二章 查詢和排序演算法 課時1 列表查詢 1 列表查詢的含義 從物件中查詢某乙個特定的元素 2 列表查詢的方式包含兩種 順序查詢和二分查詢 3 順序查詢演算法 從開始一直搜尋到最後乙個元素進行查詢,for迴圈,時間複雜度為o n 4 二分查詢針對有效的列表直接進行首尾二分查詢,不斷使得候選區減半,...