1、問題描述
若想刪除順序表第i個元素,請寫出該算法的僞代碼。
2、算法原理
首先,判斷該順序表是不是空表和刪除位置是否合理;
若通過判斷:
接着,獲得要刪除元素的值;
然後,進行刪除位置後面元素的移動(前移);
最後,表長減1。
3、僞代碼
Status ListDelete(List &L,int i,ElemType &e) //i爲要刪除元素的位序;
{ //刪除順序表中第i個元素;
if(L==NULL) //如果表爲空表,提示溢出;
return OVERFLOW;
if(i<1||i>L->length) //如果插入位置不合理,提示錯誤;
return ERROR;
e=L->elem[i-1]; //獲得被刪除元素的值;
for(int j=i;j<L->length;j++) //功能;把被刪除元素後的每個元素前移一個單位;j是數組下標;
elem[j-1]=elem[j]; //元素前移;
L->length--; //完成刪除操作後,表長減1;
return OK;
}
4、C++實現代碼
用數組模擬順序表
#include<iostream>
using namespace std;
int L[]={1,2,3,4,5,6,7}; //定義數組;
int L_len=sizeof(L)/sizeof(L[0]); //獲取數組長度;
bool temp=true;
void ListDelete(int L[],int i,int &e)
{
if(L_len) //判斷這個數組是否爲空;
{
if(i<1||i>L_len) //判斷刪除位置是否合理;
{
cout<<"插入位置不合理!!!";
temp=false;
}
else
{
e=L[i-1]; //獲取元素值;
for(int j=i;j<L_len;j++) //元素前移;
L[j-1]=L[j];
L_len--; //表長減1;
}
}
else
{
cout<<"這個順序表是個空表!!!";
temp=false;
}
}
int main()
{
int where,e;
cout<<"刪除前順序表L爲:";
for(int r=0;r<L_len;r++)
cout<<L[r]<<" ";
cout<<" 此時表長爲:"<<L_len;
cout<<endl;
cout<<"請輸出要刪除元素的位序:";
cin>>where;
ListDelete(L,where,e);
if(temp)
{
cout<<"刪除後順序表L爲:";
for(int q=0;q<L_len;q++)
cout<<L[q]<<" ";
cout<<" 此時表長爲:"<<L_len;
cout<<endl;
cout<<"被刪除的元素爲:"<<e;
}
return 0;
}
5、運行測試
用例一:刪除位置合理
運行結果
運行環境:DEV c++
用例二:刪除位置不合理
運行環境:DEV c++
至此,整個題目解答完畢!!!
結語:以上就是我對這個問題的理解、解法,可能存在着更好、更簡潔的解法代碼,希望大家提出來,我們一起討論,交換看法,共同進步。若上述代碼中存在問題,望大家指正,謝謝大家看到結尾。(∩^∩)
奮鬥的2351