當前位置:首頁 » 操作系統 » 刪除演算法

刪除演算法

發布時間: 2022-08-08 04:52:01

Ⅰ 請教二叉樹的插入和刪除演算法

哥們,插入和刪除的代碼如下
//設置條件插入
template<class T>
bool BinaryTree<T>::InsertChild(BTNode<T>*p,const int&LR,BinaryTree<char>&r)
{
BTNode<T>*q,*s;
if (p)
{
q=r.Root();
s=_Copy(q);
if (LR==0)
{
s->rChild=p->lChild;
p->lChild=s;
}
else
{
s->lChild=p->rChild;
p->rChild=s;
}
return true;
}
return false;
}
//設置條件刪除
//當which為0時,刪除左子樹,為1時刪除右子樹
template<class T>
void BinaryTree<T>::DeleteChild(BTNode<T>*p,int which)
{
if (which==0)
{
_Destroy(p->lChild);

}
if (which==1)
{
_Destroy(p->rChild);
}
}

Ⅱ 順序表、單鏈表的刪除演算法

單鏈表的刪除操作是指刪除第i個結點,返回被刪除結點的值。刪除操作也需要從頭引用開始遍歷單鏈表,直到找到第i個位置的結點。如果i為1,則要刪除第一個結點,則需要把該結點的直接後繼結點的地址賦給頭引用。對於其它結點,由於要刪除結點,所以在遍歷過程中需要保存被遍歷到的結點的直接前驅,找到第i個結點後,把該結點的直接後繼作為該結點的直接前驅的直接後繼。刪除操作如圖

單鏈表的刪除操作示意圖

刪除操作的演算法實現如下:
public T Delete(int i)
{
if (IsEmpty()|| i < 0)
{
Console.WriteLine("Link is empty or Position is error!");
return default(T);
}
Node q = new Node();
if (i == 1)
{
q = head;
head = head.Next;
return q.Data;
}
Node p = head;
int j = 1;
while (p.Next != null&& j < i)
{
++j;
q = p;
p = p.Next;
}
if (j == i)
{
q.Next = p.Next;
return p.Data;
}
else
{
Console.WriteLine("The ith node is not exist!");
return default(T);
}
}
演算法的時間復雜度分析:單鏈表上的刪除操作與插入操作一樣,時間主要消耗在結點的遍歷上。如果表為空則不進行遍歷。當表非空時,刪除第i個位置的結點, i等於1遍歷的結點數最少(1個),i等於n遍歷的結點數最多(n個,n為單鏈表的長度),平均遍歷的結點數為n/2。所以,刪除操作的時間復雜度為O(n)。

Ⅲ 刪除演算法中for(p->next

對著自己的數據類型做相應地修改:
void Delete(SeqList L, DataType x)
{ // 順序表的刪除內演算法
int i = 0, j;
for (j = 0; j < L->length; j ++)
容if (L->data[j] != x)
{
if (i < j)
L->data[i] = L->data[j];
i ++;
}
L->length = i;
}

void Delete_List(LinkList head, DataType x)
{ // 有頭結點單鏈表的刪除演算法
Node *p, *q, *s;
p = head->next;
q = head;
while (p != NULL)
{
if (p->data != x)
q = p;
else
{
s = p;
q->next = s->next;
free(s);
}
p = q->next;
}
}

Ⅳ 順序表刪除演算法求修改(順序表中刪除,否則不刪除,最後輸出此順序表中所有的結點)

void deletelist ( seqlist *l ,datatype x)
{
int j;
if (i<0 || i>l->length-1)
{
printf(" \n position error!");
return;
}
if (l->length==0)
{
printf(" \n underflow!");
return;
}
for (j=i+1;j<=l->length-1;j++)
l->data[j-1]=l->data[j];
l->length--;
}

這個函數有問題,因為當沒找到元素的時候你雖然判斷出來了,但是沒有停止程序往下執行,導致長度減1,只需要沒找到元素時讓程序return就行了

java如何實現二叉樹的刪除演算法

按照深度優先搜索找到需要刪除的節點。然後,將左子樹的最右子節點和該節點交換, 刪除節點。 如果該節點的左子樹是空,則用該節點的右子樹替換該節點。

程序就自己寫吧。

Ⅵ 順序表刪除演算法

能刪最後一個元素,注意這個演算法中的形參i是指的位置,不是下標,位置比下標大1,你看第二個if(i<1||i>length),大於length才是異常拋出,但最後一個元素的位置是i=length,也就是下標為length-1,並不在這個范圍內。

c語言 (刪除演算法)隨機輸入10個整數存入數組中,再輸入一個key值,若數組中有與key相同的值,刪除之;若

我寫了一個,嚴格說不算刪除數組中與key相同的值,不過你可以改一下。
#include <stdio.h>
int main()
{
int i,j=0,key,a[10];
printf("請輸入10個整數:\n");
for(i=0;i<10;++i)
{
scanf("%d",&a[i]);
}
printf("請輸入一個你想刪除的整數key值:\n");
scanf("%d",&key);
for(i=0;i<10;++i)
{
if(a[i]==key)j=i; //j代表與key值相同的數的位置
}
if(j==0)
printf("%d不存在!\n",key);
else
{
printf("新數組:\n");
for(i=0;i<10;++i)
{
if(i!=j)
printf("%d ",a[i]);
}
}
return 0;
}

Ⅷ 字元串刪除演算法!

我不是學c的所以不知道。辦法的話很清楚。

先從後向前找' ',找到位置後減1,從頭到這個位置。

pascal語言的話我知道

Ⅸ 求一個c語言刪除演算法

順序表的int delete(Slist *p,int i){int j;</p><p>if(i<1||i>p->5)</p><p>{printf{"position error.");</p><p>return(0);</p><p>for(j=i;j<p->5;j++)</p><p>p->data[j-1]=p->data[j];</p><p>p->5--;</p><p>return(1);</p><p>}

Ⅹ 線性表執行刪除演算法時需要移動幾個數據元素要移動幾次若刪除每個元素均等,則平均移動元素的個數是多

線性表:1、2、3、4、5、6、7,
刪除元素3後: 1、2、4、5、6、7。

線性表刪除時,要刪除元素的後面的元素依次前移,移動個數為後面元素的個數;
每個元素向前移一位,移動一次;

設線性表有n個元素,每個元素刪除的概率相等,刪除第一個元素需要移動n-1個,刪除第n個元素需要移動0個,所以平均移動元素個數是((n-1)+(n-2)+..+1+0)/n=(n-1)/2。

熱點內容
php批量查詢 發布:2025-01-16 10:43:38 瀏覽:917
適合搭建代理伺服器的雲 發布:2025-01-16 10:42:49 瀏覽:428
我的世界手機版伺服器怎麼注冊 發布:2025-01-16 10:41:30 瀏覽:614
小米雲電視伺服器 發布:2025-01-16 10:37:03 瀏覽:350
php開源wiki 發布:2025-01-16 10:27:19 瀏覽:189
sql加欄位備注 發布:2025-01-16 10:21:49 瀏覽:565
線割編程教程 發布:2025-01-16 10:21:03 瀏覽:18
谷歌瀏覽器緩存刪除 發布:2025-01-16 10:19:36 瀏覽:414
資料庫txt 發布:2025-01-16 10:16:41 瀏覽:457
小米賬號王者傳奇腳本掛機 發布:2025-01-16 10:07:25 瀏覽:917