线性表及其基本操作

线性表

#include
#include
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct{
	int *elem;	//指向线性表的指针 
	int length;	//表长 
	int listsize;	//表所占空间大小 
}SqList;

//初始化操作 
int initSqList(SqList &L){
	L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(SqList));	
	if(!L.elem)return 0;	//分配空间失败,则返回 
	L.length=0;		
	L.listsize=LIST_INIT_SIZE;
	return 1;
}

//插入操作 
int listInsert(SqList &L,int i,int e){
	if(i<1||i>L.length+1)return 0;	//判断i的合法性  
	if(L.length>=L.listsize){		//当前存储空间已满,增加分配 
		int* newbase=(int*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));
		if(!newbase)return 0;		//分配空间失败,返回错误 
		L.elem=newbase;
		L.listsize+=LISTINCREMENT;
	}
	int* q=&(L.elem[i-1]);			//q为插入位置 
	for(int* p=&(L.elem[L.length-1]);p>=q;--p)
		*(p+1)=*p;					//将插入位置之后的元素倒序依次后移 
	*q=e;							//插入e 
	++L.length;						//表长加1 
	return 1;
}

//删除线性表
int listDelete(SqList &L,int i,int &e){
	if(i<1||i>L.length)return 0;
	int *p=&(L.elem[i-1]);
	e=*p;
	int *q=L.elem+L.length-1;
	for(++p;p<=q;++p)*(p-1)=*p;
	--L.length;
	return 1;
} 

void print(SqList &L){ 
	for(int i=0;i


你可能感兴趣的:(数据结构)