順序表元素的刪除(僞代碼+C++實現代碼)

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章