习题2.10

已知长度为n的线性表A采用顺序存储结构,请写一个时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法可删除线性表中所有值为item的数据元素。

void DeleteItem(SqList& L, int item)
{
	int k = 0;
	int i = 0;
	while (1)
	{
		if (L.data[i]!=item)
		{
			L.data[k] = L.data[i];
			
				k++;
		}
		i++;
		if (L.length == i) break;

	}
	L.length = k;

}

完整程序:

#include <iostream>
#include <stdlib.h>
using namespace std;
typedef int Status;
#define OK 1
#define ERROR 0
#define OVERFLOW -2
#define MAXSIZE 100



typedef struct {
	int *data; 
	int length;
}SqList;

Status InitList(SqList& L);
void getList(SqList& L);
void PrintList(SqList L);
void DeleteItem(SqList& L, int item);

int main()
{
	int item;
	SqList L;
	InitList(L);
	cout << "输入一个顺序表L:";
	cout << endl;
	getList(L);
	PrintList(L);
	cout << "输入一个item值";
	cout << endl;
		cin >> item;
	DeleteItem(L, item);
	PrintList(L);
	system("pause");
	return 0;

}

Status InitList(SqList& L)
{
	L.data = new int[MAXSIZE];
	if (!L.data) exit(OVERFLOW);
	L.length = 0;
	return OK;


}

void getList(SqList& L)
{
	int i= 0;
	while (1)
	{
		cin >>L.data[i];
		i++;
		L.length++;
		if (cin.get() == '\n') break;
	}
}

void PrintList(SqList L)
{
	int i = L.length;
	while (1)
	{
		if (L.length - 1 < 0) break;
		cout << L.data[i-L.length];
		cout << " ";
		L.length--;
	}
	
}
void DeleteItem(SqList& L, int item)
{
	int k = 0;
	int i = 0;
	while (1)
	{
		if (L.data[i]!=item)
		{
			L.data[k] = L.data[i];
			
				k++;
		}
		i++;
		if (L.length == i) break;

	}
	L.length = k;

}

版权声明:
作者:maple
链接:http://haut.vip/?p=92
来源:欢迎来到计服社
文章版权归作者所有,未经允许请勿转载。

THE END
分享
二维码
海报
习题2.10
已知长度为n的线性表A采用顺序存储结构,请写一个时间复杂度为O(n)、空间复杂度为O(1)的算法,该算法可删除线性表中所有值为item的数据元素。 void DeleteItem……
<<上一篇
下一篇>>