C++编程练习(1)----“实现简单的线性表的顺序存储结构“

线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表的数据元素。

故可以用数组来实现顺序存储结构。

用C++编写的利用数组实现简单的读取、插入和删除功能的线性表。

#include<iostream>
#define MAXSIZE 20
#define OK 1
#define ERROR 0
#define TURE 1
#define FALSE 0
typedef int Status;
typedef int ElemType;
class SqList{
public:
	SqList():length(1) {
		for (int x=0;x<MAXSIZE;x++)
			data[x]=0;
	}
	ElemType data[MAXSIZE];
	int length;
	Status ShowElem() const;
	Status GetElem(int i, ElemType *e) ;
	Status ListInsert(int i,ElemType e);
	Status ListDelete(int i,ElemType *e);
};
Status SqList::ShowElem() const
{
	int k;
	if (length==0)
		return ERROR;
	std::cout<<"当前线性表内容为:"<<std::endl;
	for (k=1;k<=length;k++)
		std::cout<<data[k-1]<<" 、 ";
	std::cout<<std::endl;
	return OK;
}

Status SqList::GetElem(int i,ElemType *e) 
{
	if (length==0 || i<1 || i>length)
		return ERROR;
	*e=data[i-1];
	return OK;
}

Status SqList::ListInsert(int i,ElemType e) 
{
	int k;
	if (length==MAXSIZE)
		return ERROR;
	if (i<1 || i>length)
		return ERROR;
	if (i<=length)
	{
		for (k=length-1;k>=i-1;k--)
			data[k+1]=data[k];
	}
	data[i-1]=e;
	length++;
	return OK;
}

Status SqList::ListDelete(int i,ElemType *e)
{
	int k;
	if (length==0)
		return ERROR;
	if (i<1 || i>length)
		return ERROR;
	*e=data[i-1];
	if (i<length)
	{
		for (k=i-1;k<=length-1;k++)
			data[k]=data[k+1];
	}
	length--;
	return OK;
}

线性表顺序存储结构的优缺点:

一、优点

1、在存、读数据时,不管是哪个位置,时间复杂度都是O(1)。

2、无须为表示表中元素之间的逻辑关系而增加额外的存储空间。

二、缺点

1、插入和删除时,需要移动大量元素,时间复杂度都是O(n)。

2、当线性表长度变化较大时,难以确定存储空间的容量。

3、造成存储空间的“碎片”。

posted @ 2014-03-25 09:25  Never say Ever  阅读(301)  评论(0编辑  收藏  举报