順序表子函數

#include<iostream>
#include<stdlib.h>
typedef int ElemType;
struct List
{
	ElemType *list;
	int size;
	int Maxsize;
};

void InitList(List &L)
{
	L.Maxsize = 10;
	L.list = new ElemType[L.Maxsize];
	if (L.list == NULL)
	{
		std::cout << "動態可分配的存儲空間用完,退出運行" << std::endl;
		exit(1);
	}
	L.size = 0;
}

void ClearList(List &L)
{
	if (L.list != NULL)
	{
	     delete []L.list;
		 L.list = NULL;
	}
	L.Maxsize = 0;
	L.size = 0;
}

int LenthList(List &L)
{
	return L.size;
}

bool EmptyList(List &L)
{
	return L.size == 0;
}

ElemType GetList(List &L, int pos)
{
	if (pos<1 || pos>L.size)
	{
		std::cerr << "pos is out range!" << std::endl;
		exit(1);
	}
	return L.list[pos - 1];
}

void TraverseList(List &L)
{
	for (int i = 0; i < L.size; i++)
		std::cout << L.list[i] << ' ';
	std::cout << std::endl;
}

bool FindList(List &L, ElemType& item)
{
	for (int i = 0; i < L.size; i++)
		if (L.list[i] == item)
		{
			item = L.list[i];
			return true;
		}
	return false;
}

bool InsertList(List &L, ElemType item, int pos)
{
	if (pos<-1 || pos>L.size)
	{
		std::cout << "pos值無效!" << std::endl;
		return false;
	}
	int i;
	if (pos == 0)
	{
		for (i = 0; i < L.size; i++)
			if (item < L.list[i])
				break;
		pos = i + 1;
	}
	else if (pos == -1)
		pos = L.size + 1;
	if (L.size == L.Maxsize) 
	{
		int k = sizeof(ElemType);
		L.list = (ElemType*)realloc(L.list, 2 * L.Maxsize*k);
		if (L.list == NULL)
		{
			std::cout << "動態可分配的儲存空間用完,退出運行!" << endl;
			exit(1);
		}
		L.Maxsize = 2 * L.Maxsize;
	}
	for (i = L.size - 1; i >= pos - 1; i--)
		L.list[i + 1] = L.list[i];
	L.list[pos - 1] = item;
	L.size++;
	return true;
}

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