顺序表c语言实现

#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 100
#define LISTINCREAMENT 10 
typedef int Status;
typedef int ElemType;
//定义顺序表类型 
typedef struct {   
	ElemType *elem;
	int length;
	int listsize;
} SqList;
//初始化一个顺序表
Status Init_SqList(SqList &L) {  
	L.elem = (ElemType*)malloc(LIST_INIT_SIZE * sizeof(ElemType));
	if(!L.elem) return 0;
	L.length = 0;
	L.listsize = LIST_INIT_SIZE;
	return 1;
}
//插入
Status Insert_SqList(SqList &L, int i, ElemType e) {   
	if(i < 1 || i > L.length + 1) return 0;
	if(L.length >= L.listsize) {
		ElemType *newbase = (ElemType*)realloc(L.elem, (L.listsize + LISTINCREAMENT) * sizeof(ElemType));
		if(!newbase) return 0;
		L.elem = newbase;
		L.listsize += LISTINCREAMENT;
	}
	ElemType *q = &L.elem[i - 1];
	ElemType *p;
	for(p = &(L.elem[L.length - 1]); p >= q; p--) {
		*(p + 1) = *p;
	}
	*q = e;
	++L.length;
	return 1;
}
//删除 
Status Delete_SqList(SqList &L, int i, ElemType &e) {  
	if(i < 1 || i > L.length) return 0;	
	ElemType *p = &(L.elem[i - 1]);
	e = *p;
	ElemType *q = &(L.elem[L.length - 1]);
	for(; p < q; p++) {
		*p = *(p + 1);
	}
	--L.length;
	return 1;
}
//遍历 
Status Traverse_SqList(SqList &L) {	
	for(int i = 1; i <= L.length; i++) {
		printf("%d\n", L.elem[i - 1]);
	}
	return 1;
}
int main(void) {	
	Status i, a;
	SqList L;	
	Init_SqList(L);
	printf("顺序表长度是:%d\n", L.listsize);	
	for(int i = 1; i <= 5; i++) {
		int m;
		scanf("%d", &m);
		Insert_SqList(L, i, m);
	}	 
	Traverse_SqList(L);
		
	ElemType e = Delete_SqList(L, 3, e);
	Traverse_SqList(L);
	return 0;
}
发布了44 篇原创文章 · 获赞 0 · 访问量 831

猜你喜欢

转载自blog.csdn.net/Komatsu_1137/article/details/104081759