C语言数据结构顺序表基本操作之插入删除添加元素打印完整代码

#include
#include
#include
#define OK 1
#define ERROR -1
#define LISTSIZEMAX 10
#define  LISTSIZE 5

typedef int ElemType;

typedef struct {
	ElemType *elem;
	int length;
	int size;
} List;
//初始化 
int CreatList(List *L) {
	L->elem = (ElemType*)malloc(sizeof(ElemType)*LISTSIZE);
	if(!(L->elem)) {
		return ERROR;
	}
	L->length = 0;
	L->size=LISTSIZEMAX;
	return OK;
}
//打印 
int PrintfList(List *L) {
	if(L->length==0) {
		printf("顺序表为空!");
		return ERROR;
	}
	int i;
	for(i=0; ilength; i++) {
		printf("%d ",L->elem[i]);
	}
	printf("\n");
}
//添加元素 
void AddListDate(List *L,int n) {
	int i;
	srand(time(0));
	for(i=0; ielem[i]=rand()%1000;
		L->length++;
	}
	PrintfList(L);
}
//插入元素 
int ListInsert(List *L,int i,ElemType e) {
	int j,newsize;
	if(i<1||i>L->length+1)
		return ERROR;
	if(L->length>=L->size) {
		ElemType *newbase;
		newsize=(L->size+LISTSIZEMAX)*sizeof(ElemType);//(L.size+LISTSIZEMAX)个ElemType 空间
		newbase=(ElemType*)realloc(L->elem,newsize);//指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。
		if(!(newsize))
			return ERROR;
		L->elem=newbase;
		L->size+=LISTSIZEMAX;
	}
	for(j=L->length-1; i-1<=j; j--)
		L->elem[j+1]=L->elem[j];
	L->elem[i-1]=e;
	L->length++;
	return OK;

}
//删除元素 
int ListDelete(List*L,int i,int &e1){
	int j;
	if((i<1)||(i>L->length))
	return ERROR;
    e1=L->elem[i-1];
	for(j=i;L->length-1>=j;j++)
	L->elem[j-1]=L->elem[j];
	L->length--;
	return OK;
} 

int main(void) {
	//初始化 
	int n;
	printf("请输入顺序表初始化数据个数:");
	scanf("%d",&n);
	List L;
	CreatList(&L);
	AddListDate(&L,n);
	PrintfList(&L);
	//插入 
	int i;
	ElemType e;
	printf("请输入顺序表插入位置及插入数据:");
	scanf("%d%d",&i,&e);
	ListInsert(&L,i,e);
	PrintfList(&L);
	//删除
	 int j,e1;
	printf("请输入顺序表删除位置:");
	scanf("%d",&j);
	ListDelete(&L,j,e1);
	printf("删除数据为:%d\n",e1);
	PrintfList(&L);
	return 0;
}

插入算法:

int ListInsert(List *L,int i,ElemType e) {
	int j,newsize;
	if(i<1||i>L->length+1)
		return ERROR;
	if(L->length>=L->size) {
		ElemType *newbase;
		newsize=(L->size+LISTSIZEMAX)*sizeof(ElemType);//(L.size+LISTSIZEMAX)个ElemType 空间
		newbase=(ElemType*)realloc(L->elem,newsize);//指针名=(数据类型*)realloc(要改变内存大小的指针名,新的大小)。
		if(!(newsize))
			return ERROR;
		L->elem=newbase;
		L->size+=LISTSIZEMAX;
	}
	for(j=L->length-1; i-1<=j; j--)
		L->elem[j+1]=L->elem[j];
	L->elem[i-1]=e;
	L->length++;
	return OK;

}

删除算法:

int ListDelete(List*L,int i,int &e1){
	int j;
	if((i<1)||(i>L->length))
	return ERROR;
    e1=L->elem[i-1];
	for(j=i;L->length-1>=j;j++)
	L->elem[j-1]=L->elem[j];
	L->length--;
	return OK;;
} 

 打印算法:

int PrintfList(List *L) {
	if(L->length==0) {
		printf("顺序表为空!");
		return ERROR;
	}
	int i;
	for(i=0; ilength; i++) {
		printf("%d ",L->elem[i]);
	}
	printf("\n");
}

添加元素算法:

void AddListDate(List *L,int n) {
	int i;
	srand(time(0));
	for(i=0; ielem[i]=rand()%1000;
		L->length++;
	}
	PrintfList(L);
}

 

 

 

 

 

你可能感兴趣的:(数据结构与算法,C语言基础知识及例题解析,c语言,数据结构)