01 數據結構C++ 順序表

#include<iostream>
#define MaxSize 20

typedef int ElemType;

typedef struct {
	ElemType *elem;
	int length;
}SqList;


bool InitList(SqList& L) {
	/*
		初始化順序表,分配空間。
	*/
	L.elem = new int [MaxSize];
	if (!L.elem)
		return false;
	L.length = 0;
	return true;
}

bool CreateList(SqList& L) {
	/*
		插入數據構建順序表
	*/
	int x = 0, i = 0;
	while (x != -1){
		if (L.length == MaxSize) {
			std::cout  << "順序表已經滿了" << std::endl;
			return false;
		}
		std::cout << "請輸入插入的元素" << std::endl;
		std::cin >> x;
		L.elem[i++] = x;
		L.length ++;

	}
	return true;
}

bool PrintList(SqList L) {
	/*
		打印順序表中的內容。
	*/
	if (L.length == 0)
		return false;
	for (int i = 0; i < L.length; i++) {
		std::cout << L.elem[i] << std::endl;
	}
	return true;
}

bool GetElem(SqList L, int i, int& e) {
	// 從列表中取第i個值,並且返回到e中
	if (i<1 || i>L.length) {
		return false;
	}
	e = L.elem[i - 1];
	return true;
}

int LocateElem(SqList L, int e) {
	/*
		輸入需要查找的元素,返回該元素所在的索引值。
	*/
	if (!L.elem)
		return false;
	for (int i = 1; i < L.length; i++)
		if (L.elem[i] == e)
			return i + 1;
	return -1;
}

bool ListInsert_Sq(SqList& L, int i, int e) {
	/*
		向順序表中插入一個值。
	*/
	if (L.length == MaxSize)
		return false;
	for (int j = L.length; j > i; j--)
		L.elem[j] = L.elem[j - 1];
	L.elem[i] = e;
	L.length++;
	return true;
}

bool ListDelete_Sq(SqList& L, int i, int& e) {
	/*
		從順序表中刪除一個值。
	*/
	if (i<1 || i >L.length)
		return false;
	e = L.elem[i];
	for (int j = i; j < L.length; j++)
		L.elem[j] = L.elem[j + 1];
	L.length--;
	return true;
}

int main() {
	SqList L;

	// 初始化順序表
	InitList(L);

	// 創建順序表
	CreateList(L);

	// 打印順序表
	PrintList(L);

	// 從表中取數
	int number;
	int e;
	std::cout << "輸入您要查找的序號" << std::endl;
	std::cin >> number;
	GetElem(L, number, e);
	std::cout << e << std::endl;

	// 從順序表中查找
	int index;
	int FindNumber;
	std::cout << "輸入要查找的元素" << std::endl;
	std::cin >> FindNumber;
	index = LocateElem(L, FindNumber);
	if (index == -1)
		std::cout << "該順序表中沒有改元素" << std::endl;
	std::cout << index << std::endl;


	// 從順序表中插入元素
	int InsertIndex;
	int InsertElem;
	std::cout << "請輸入您要插入的元素的位置" << std::endl;
	std::cin >> InsertIndex;
	std::cout << "請輸入您要出入的元素" << std::endl;
	std::cin >> InsertElem;
	ListInsert_Sq(L, InsertIndex, InsertElem);
	PrintList(L);

	// 從順序表中刪除一個元素
	int DeleteIndex;
	int DeleteElem;
	std::cout << "請輸入您要刪除元素的索引" << std::endl;
	std::cin >> DeleteIndex;
	DeleteElem = ListDelete_Sq(L, DeleteIndex, DeleteElem);
	std::cout << "刪除的元素是" << DeleteElem << std::endl;
	return true;
}

 

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