顺序线性表(一)

#include <iostream>
using namespace std;

#define INIT_SIZE 10
#define ADD_SIZE 3

typedef double ElemType;

typedef struct
{
	ElemType *data;     //顺序线性表的首地址
	int length;   //存放元素个数
	int size;    //总空间个数
}SqList;

//完成顺序线性表的初始化
//如果成功,返回1,否则返回0
int Init_SqList(SqList &L)
{
	L.data = (ElemType *)malloc(INIT_SIZE*sizeof(ElemType));
	if(L.data == NULL)   //if(!L.data)
	{
		//也表示结束
		return 0;   //返回0表示初始化空间失败
	}
	L.length = 0;  //记得初始化元素个数为0
	L.size = INIT_SIZE;
	return 1;
}

//在顺序线性表L的第i位置插入一个元素e
//插入成功,返回1,否则0
int Insert_SqList(SqList &L,int i,ElemType e)
{
	int k;
	ElemType *newbase;
	//如果位置不合法
	if(i<1 || i>L.length+1)
	{
		return 0;
	}
	//是否放满
	if(L.length>=L.size)  //表示放满了
	{
		newbase=(ElemType *)realloc(L.data,(L.size+ADD_SIZE)*sizeof(ElemType));
		if(!newbase)
			return 0;
		L.size += ADD_SIZE;
	}
	//到此,位置和空间都考虑了
	k = L.length;   //从最后一个位置开始移动
	while(k>=i)
	{
		L.data[k] = L.data[k-1];
		k--;   //没有这步,定死循环
	}
	//终于移完了
	L.data[i-1] = e;
	L.length++;
	return 1;
}

//输出顺序线性表的所有元素值
void Print_SqList(SqList L)
{
	int i;
	for(i=0;i<L.length;i++)
		cout<<L.data[i]<<' ';
	cout<<endl;
}

int main()
{
	freopen("1.in","r",stdin);
	int n,i;
	double e;
	SqList L;  //定义一个变量L,L就是顺序线性表 
	//应该完成顺序线性表的初始化
	if(Init_SqList(L)==0)
		return 0;
	cin>>n;	
	while(n--)
	{
		cin>>i>>e;
		Insert_SqList(L,i,e);
	}
	Print_SqList(L);
	return 0;
}

你可能感兴趣的:(顺序线性表(一))