数据结构——顺序表

本人新萌一只,最近开始学习数据结构【C语言版】,打算做一些总结归纳,希望可以帮助到自己和大家~

这次整理的是数据结构中的顺序表,首先我们具体知道什么是顺序表:
使用线性表中的顺序存储结构生成的表,我们称为顺序表
是不是相当的贴切~

第一次写博客,咱啥也不干说,啥也不干问,直接把自己整理好的代码贴出来吧:

#include
#include
#define Size 4


/*自定义顺序表的结构*/ 

typedef struct Table{
	int *head; //生命一个名为head的长度不明确的数组(又名动态数组) 
	int length; //记录当前的顺序表的长度
	int size; //记录顺序表分配的存储容量 
}table;

/*顺序表的创建*/
 
table initTable(){
	table t;
	t.head = (int *)malloc(Size * sizeof(int)); //构造一个空的顺序表,动态申请存储空间 
	if(!t.head){ //如果申请失败则提示并且退出程序 
		printf("初始化失败"); 
		exit(0); 
	}
	t.length = 0; //空表的初始化为0 
	t.size = Size; //空表的初始化存储空间为Size 
	return t;
}

/*查找函数,其中,elem表示要查找的数据元素的值*/
int selectTable(table t, int elem){
	int i;
	for(i = 0;i < t.length; i ++){
		if( t.head[i] == elem){
			return i+1;
		}
	}
	return -1; //查找失败返回-1 
} 

/*更改函数,其中elem为要更改的元素,newElem为新的数据元素*/
table amendTable(table t, int elem, int newElem){
	int add = selectTable(t , elem); //返回的是元素的逻辑位置 
	t.head[add - 1] = newElem; //物理位置比逻辑位置小1 
	return t;
} 

/*顺序表插入元素*/
/*插入函数无非从头、尾或者中间插入*/
//插入函数,其中elem为插入的元素,add未插入到顺序表的位置
table addTable(table t, int elem, int add){
	//首先需要检查插入是否为是顺序表产生异常
	if(add > t.length+1 || add < 1){
		printf("插入位置有问题");
		return t;
	} 
	
	//做插入操作时,首先需要看顺序表时候有多余的存储空间提供给插入的元素
	if(t.length == t.size){
		t.head = (int*)realloc(t.head, (t.size+1)*sizeof(int));
		if(!t.head){
			printf("存储分配失败");
			return t; 
		}
		t.size += 1;
	} 
	//插入操作,需要将插入位置开始的后续元素,逐个后移
	int i;
	for(i = t.length-1; i >= add-1; i--){
		t.head[i+1] = t.head[i];
	} 
	//全部后移后,将需要的元素直接插入到需要位置 
	t.head[add-1] = elem;
	t.length++;
	return t;
} 

/*顺序表删除元素*/
table delTable(table t, int add){
	if(add >t.length || add < 1){
		printf("被删除元素的位置有误");
		exit(0); 
	}
	//删除操作
	int i;
	for(i = add; i < t.length; i++){
		t.head[i-1] = t.head[i];
	} 
	t.length--;
	return t;
} 

/*挨个读出所有元素*/
void displayTable(table t){
	int i;
	for(i = 0; i < t.length; i++){
		printf("%d", t.head[i]);
	}
	printf("\n");
}

int main(){
	table t1 = initTable();
	int i;
	for( i = 1; i <= Size; i++){
		t1.head[i-1] = i;
		t1.length++;
	}
	printf("原顺序表"); 
	displayTable(t1);

	printf("删除元素3");
	t1 = delTable( t1, 3);
	displayTable(t1);

	printf("在2的位置插入5");
	t1 = addTable(t1, 5, 2);
	displayTable(t1);

	printf("查找元素4的位置");
	int add = selectTable( t1, 4);
	printf("%d\n", add);

	printf("将元素1改为9:");
	t1 = amendTable( t1, 3, 6);
	displayTable(t1);
	return 0;
}

当然,最后还有几点需要注意的地方:
1.申请空间的时候尽量大一点,避免数据溢出
2.realloc申请空间的时候也尽量申请大点,不然一次一次的来很费时间的【降低运行效率】

你可能感兴趣的:(C语言,数据结构)