首页 > 其他 > 详细

顺序表学习

时间:2020-04-27 22:56:42      阅读:52      评论:0      收藏:0      [点我收藏+]

顺序表学习

顺序表原理

顺序表是一种简单的线性结构,逻辑上相邻的数据在计算机内的存储位置也是相邻的,可以快速定位第几个元素,中间不允许有空值,插入、插入时需要移动大量的元素。

顺序表的三个要素

1.elems记录存储位置的基地址
2.分配一段连续的存储空间size
3.用length记录实际的元素长度,即顺序表的长度,与size不一定相等,因为空间预留着,不一定存储着数据。
定义如下:

template <Typename ElemType>
struct _Sqlist{
        ElemType* elems;
	int length;
	int size;
};

顺序表的算法实现

假定ElemType 为int类型

顺序表的初始化

bool initList(SqList& L) {
	L.elems = new int[MAX_SIZE];		//为顺序表分配MAX_SIZE个int元素的空间 
	if (!L.elems) return false;			//分配空间失败 返回false
	L.length = 0;
	L.size = MAX_SIZE;
	return true;
}

顺序表增加元素(加在表的最后面)

bool listAppend(SqList& L, int e) {
	if (L.size == L.length) {  
		return false;		//存储空间已满,返回false
	}
	L.elems[L.length++] = e;
	return true;
}

顺序表插入元素(加在表中)

bool listInsert(SqList& L,int index,int e){	//在已有的元素中间插入一个元素,index表示下标,即第index+1个元素
	if (index < 0 || index >= L.length) {
		return false;	//index 的值不合法,返回false
	}
	if (L.length == L.size) {
		return false;	//存储空间满了,返回false
	}
	for (int j = L.length - 1;j >= index;j--) {
		L.elems[j + 1] = L.elems[j];		
	}
	L.elems[index] = e;
	L.length += 1;
	return true;
}

顺序表删除元素

bool listDelete(SqList& L, int index) {
	if (index<0 || index>L.length - 1) {
		return false;	//检查index的合法性
	}
	for (int j = index + 1;j <= L.length - 1;j++) {
		L.elems[j - 1] = L.elems[j];
	}
	L.length -= 1;
	return true;
}

销毁整个顺序表

void listDestroy(SqList& L) {
	if (L.elems) {
		delete[]L.elems;//删除动态内存
	}
	L.size = 0;
	L.length = 0;
}

就这样

顺序表学习

原文:https://www.cnblogs.com/Ybossy/p/12790533.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!