顺序表

1. 头文件

#ifndef __SEQLIST_H__
#define __SEQLIST_H__

#define MAXSIZE 100

typedef int data_t;
typedef struct {
	data_t data[MAXSIZE];
	int last;// 数据的下标 
}seqlist_t;

seqlist_t* create_seqlist(void);
void clear_seqlist(seqlist_t *L);

int is_empty_seqlist(seqlist_t *L);
int is_full_seqlist(seqlist_t *L);
void set_empty_seqlist(seqlist_t *L);
int get_length_seqlist(seqlist_t *L);
void show_seqlist(seqlist_t *L);

int insert_seqlist(seqlist_t *L,data_t x,int pos);
int delete_seqlist(seqlist_t *L,int pos);
int change_seqlist(seqlist_t *L,data_t x,int pos);
int search_seqlist(seqlist_t *L,data_t x);
#endif

2. 方法实现

2.1 创建顺序表

//创建表, 新建了 元素为 MAXSIZE 个 顺序表
seqlist_t *create_seqlist(void){
	seqlist_t *L = NULL;
	//malloc 返回void * ,需要强制转换
	L = (seqlist_t *)malloc(sizeof(seqlist_t));
	if(L == NULL){
		puts("no memory");
		return NULL;
	}
	L->last = -1;
	return L;
}

2.2 清空表

//清空表
void clear_seqlist(seqlist_t *L){
	if(L == NULL){
		puts("seqlist is NULL");
		return;
	}
	free(L);
	return;
}

2.3 判断顺序表是否为空

int is_empty_seqlist(seqlist_t *L){
	if(L == NULL){
		puts("seqlist is empty");
		return -1;
	}	
	return (L->last == -1);
}

2.4  设置顺序表为空

void set_empty_seqlist(seqlist_t *L){
	if(L == NULL){
		puts("seqlist is NULL");
		return;
	}
	L->last = -1;
	return;
}

2.5 获取长度

int get_length_seqlist(seqlist_t *L){
	if(L == NULL){
		puts("seqlist is NULL");
		return -1;
	}
	return (L->last+1);
}

2.6 判断表是否已满

int is_full_seqlist(seqlist_t *L){
	if(L == NULL){
		puts("seqlist is NULL");
		return -1;
	}
	return (L->last == MAXSIZE -1);

}

2.7 打印表

void show_seqlist(seqlist_t *L){
	int i=0;
	if(L == NULL){
		puts("seqlist is NULL");
		return;
	}
	for(i=0;i<=L->last;i++){
		printf("L->data[%d] = %d\n",i,L->data[i]);
	}
	return;

}

2.8 在指定位置插入元素

int insert_seqlist(seqlist_t *L,data_t x,int pos){
	int i = 0;
	if((is_full_seqlist(L))||(pos < 0)||(pos > L->last+1)){
		puts("input argv is invalid");
		return -1;
	}
	for(i=L->last;i>=pos;i--){
		L->data[i+1] = L->data[i];
	}
	L->data[pos] = x;
	L->last++;
	return 0;
}

2.9 删除指定位置的元素

int delete_seqlist(seqlist_t *L,int pos){
	int i = 0;
	if((pos<0) ||(pos>L->last+1)){
		puts("input argv invalid");
		return -1;
	}
	for(i=pos+1;i<=L->last;i++){
		L->data[i-1]=L->data[i];
	}
	L->last--;
	return 0;
}

2.10 改变指定位置的元素

int change_seqlist(seqlist_t *L,data_t x,int pos){

	if((pos<0) ||(pos>L->last+1)){
		puts("input argv invalid");
		return -1;
	}
	L->data[pos] = x;
	return 0;
}

2.11 查找元素对应坐标

int search_seqlist(seqlist_t *L,data_t x){
	int i=0;
	for(i=0;i<=L->last;i++){
		if(L->data[i] == x){
			return i;
		}
	}
	return -1;
}

上一篇:2.11


下一篇:顺序表创建·c语言版