1. 程式人生 > >已知長度為n的線性表A採用順序儲存結構,請寫一個時間複雜度為O(n)、空間複雜度為O(1)的演算法,該演算法可刪除線性表中所有值為item的資料元素。

已知長度為n的線性表A採用順序儲存結構,請寫一個時間複雜度為O(n)、空間複雜度為O(1)的演算法,該演算法可刪除線性表中所有值為item的資料元素。

語言:C++

#include <iostream>
using namespace std;
typedef int ElemType;

//定義
#define MAXSIZE 100
typedef struct
{ElemType *elem;
int length;}SqList;

//建立
void CreateList(SqList &L)
{
    int i;
    L.elem=new ElemType[MAXSIZE];
    if(!L.elem) cout<<"建立失敗!"<<endl;
    cout<<"請輸入線性表的長度,不能大於"<<MAXSIZE<<':'<<endl; cin>>L.length;
    cout<<"請依次輸入表中元素:"<<endl;
    for(i=0;i<L.length;i++)
        cin>>L.elem[i];
    cout<<"建立完成!"<<endl;
}


//輸出表
void display(SqList L)
{
    int i;
    cout<<'[';
    for(i=0;i<L.length;i++)
        {if (i==L.length-1)cout<<L.elem[i];
        else cout<<L.elem[i]<<',';}
    cout<<']'<<endl;
}

void ChooseList_L(SqList &L,int item)
{
    int i=0;int j=0;int k;int count=0;
    for(k=0;k<L.length;k++)
    {
        if(L.elem[k]!=item)
        {
            L.elem[j]=L.elem[i];
            i++;
            j++;

        }
        else
        {
            i++;
            count++;
        }

    }
    L.length-=count;


}
int main()
{
    SqList L;int item;

    CreateList(L);
    cout<<"當前線性表為:"<<endl;
    display(L);

    cout<<"刪除表中所有值為item的資料元素,請輸入item:"<<endl;
    cin>>item;

    ChooseList_L(L,item);

    cout<<"選擇刪除後線性表為:"<<endl;
    display(L);

    return 0;
}