已知长度为n的线性表A采用顺序存储结构,请写一时间复杂度为O(n)、空间复 杂度为O(1)的算法,该算法删除线性表中所有值为item的数据元素。 #include#define ok 1 #define error 0 #define overflow -2 #define MaxSize 100 using namespace std; typedef int status; typedef int ElemType; //定义 typedef struct { ElemType *elem; int length; }SqList; //初始化 status InitList(SqList &L) { L.elem = new ElemType[MaxSize]; if (!L.elem) return overflow; int length = 0; return ok; } //创建 status CreatList(SqList &L, int n) { if (!L.elem) return error; for (int i = 0; i < n; i++) cin >> L.elem[i]; L.length = n; return ok; } //void deleteitem(SqList &L, ElemType item) //{ //删除顺序表L中所有值为item的元素 // int k = 0, i; // 记录值不等于item的个数 // for (i = 0; i < L.length; i++) // { // if (L.elem[i] != item ) // { // L.elem[k] = L.elem[i]; // cout << L.elem[k] << ' '; // } // k++; //不等于x的元素增1 // } // L.length = k; //顺序表L的长度等于k //} void deleteitem(SqList &L, ElemType item) { int k = 0, i = 0; //k记录等于item的元素个数 while (i < L.length) { if (L.elem[i] == item) k++; else { L.elem[i - k] = L.elem[i]; //当前元素前移k个位置 cout << L.elem[i - k] << ' ' ; } i++; } L.length = L.length - k; //顺序表的长度递减 } int main() { int n, item, j ; SqList L; InitList(L); cout << "输入顺序表长度:" << endl; cin >> n; cout << "输入顺序表元素:" << endl; CreatList(L, n); cout << "输入要删除的元素:" << endl; cin >> item; cout << "输出删除后的顺序表元素:" << endl; deleteitem(L, item); return ok; }



