数据结构学习笔记之顺序表

进入主题:
表结构之顺序表:
定义:

typedef struct Array
{	
TYPE* ptr;	 存储元素的内存首地址
size_t cal;	// 表的容量
size_t cnt;	// 元素的数量
}Array;
// 创建
Array* create_array(size_t size)
{
	// 分配表结构内存
	Array* arr = malloc(sizeof(Array));
	// 分配存储元素的内存
	arr->ptr = malloc(sizeof(TYPE)*size);
	// 记录容量
	arr->cal = size;
	// 初始化元素数量
	arr->cnt = 0;
	return arr;
}

// 销毁
void destory_array(Array* arr)
{
	free(arr->ptr);
	free(arr);
}

// 清空 
void clean_array(Array* arr)
{
	arr->cnt = 0;
}

// 插入
bool insert_array(Array* arr,int index,TYPE val)
{
	// 判断表是否已满
	if(arr->cnt >= arr->cal) return false;
	// 判断下标是否能让表中的元素保持连续
	if(index > arr->cnt) return false;

// 内存拷贝,向后移动数据
	/*for(int i=arr->cnt; i>index; i--)
	{
		arr->ptr[i] = arr->ptr[i-1];
	}*/
	memcpy(arr->ptr+index+1,arr->ptr+index,(arr->cnt-index)*sizeof(TYPE));//运用函数
	
arr->ptr[index] = val;
	arr->cnt++;
	return true;

}

// 删除
bool delete_array(Array* arr,int index)
{
	if(index >= arr->cnt) return false;
	memcpy(arr->ptr+index,arr->ptr+index+1,(arr->cnt-index-1)*sizeof(TYPE));
	arr->cnt--;
	return true;
}

// 访问
bool access_array(Array* arr,int index,TYPE* val)
{
	if(index >= arr->cnt) return false;
	*val = arr->ptr[index];
	return true;
}

// 修改
bool modify_array(Array* arr,int index,TYPE val)
{
	if(index  >= arr->cnt) return false;
	arr->ptr[index] = val;
	return true;
}

// 查询
int query_array(Array* arr,TYPE key)
{
	for(int i=0; i<arr->cnt; i++)
	{
		if(arr->ptr[i] == key) return i;
	}

// 创建
Array* create_array(size_t size)
{
	// 分配表结构内存
	Array* arr = malloc(sizeof(Array));
	// 分配存储元素的内存
	arr->ptr = malloc(sizeof(TYPE)*size);
	// 记录容量
	arr->cal = size;
	// 初始化元素数量
	arr->cnt = 0;
	return arr;
}

// 销毁
void destory_array(Array* arr)
{
	free(arr->ptr);
	free(arr);
}

// 清空 
void clean_array(Array* arr)
{
	arr->cnt = 0;
}

// 插入
bool insert_array(Array* arr,int index,TYPE val)
{
	// 判断表是否已满
	if(arr->cnt >= arr->cal) return false;
	// 判断下标是否能让表中的元素保持连续
	if(index > arr->cnt) return false;

// 内存拷贝,向后移动数据
	/*for(int i=arr->cnt; i>index; i--)
	{
		arr->ptr[i] = arr->ptr[i-1];
	}   */
	memcpy(arr->ptr+index+1,arr->ptr+index,(arr->cnt-index)*sizeof(TYPE));
	
arr->ptr[index] = val;
	arr->cnt++;
	return true;

}

// 删除
bool delete_array(Array* arr,int index)
{
	if(index >= arr->cnt) return false;
	memcpy(arr->ptr+index,arr->ptr+index+1,(arr->cnt-index-1)*sizeof(TYPE));
	arr->cnt--;
	return true;
}

// 访问
bool access_array(Array* arr,int index,TYPE* val)
{
	if(index >= arr->cnt) return false;
	*val = arr->ptr[index];
	return true;
}

// 修改
bool modify_array(Array* arr,int index,TYPE val)
{
	if(index  >= arr->cnt) return false;
	arr->ptr[index] = val;
	return true;
}

// 查询
int query_array(Array* arr,TYPE key)
{
	for(int i=0; i<arr->cnt; i++)
	{
		if(arr->ptr[i] == key) return i;
	}

return -1;// 创建
Array* create_array(size_t size)
{
	// 分配表结构内存
	Array* arr = malloc(sizeof(Array));
	// 分配存储元素的内存
	arr->ptr = malloc(sizeof(TYPE)*size);
	// 记录容量
	arr->cal = size;
	// 初始化元素数量
	arr->cnt = 0;
	return arr;
}

// 销毁
void destory_array(Array* arr)
{
	free(arr->ptr);
	free(arr);
}

// 清空 
void clean_array(Array* arr)
{
	arr->cnt = 0;
}

// 插入
bool insert_array(Array* arr,int index,TYPE val)
{
	// 判断表是否已满
	if(arr->cnt >= arr->cal) return false;
	// 判断下标是否能让表中的元素保持连续
	if(index > arr->cnt) return false;

// 内存拷贝,向后移动数据
	/*for(int i=arr->cnt; i>index; i--)
	{
		arr->ptr[i] = arr->ptr[i-1];
	}*/
	memcpy(arr->ptr+index+1,arr->ptr+index,(arr->cnt-index)*sizeof(TYPE));
	
arr->ptr[index] = val;
	arr->cnt++;
	return true;

}

// 删除
bool delete_array(Array* arr,int index)
{
	if(index >= arr->cnt) return false;
	memcpy(arr->ptr+index,arr->ptr+index+1,(arr->cnt-index-1)*sizeof(TYPE));
	arr->cnt--;
	return true;
}

// 访问
bool access_array(Array* arr,int index,TYPE* val)
{
	if(index >= arr->cnt) return false;
	*val = arr->ptr[index];
	return true;
}

// 修改
bool modify_array(Array* arr,int index,TYPE val)
{
	if(index  >= arr->cnt) return false;
	arr->ptr[index] = val;
	return true;
}

// 查询
int query_array(Array* arr,TYPE key)
{
	for(int i=0; i<arr->cnt; i++)
	{
		if(arr->ptr[i] == key) return i;
	}

return -1;

}

// 排序
void sort_array(Array* arr);
// 遍历
void show_array(Array* arr)
{
	for(int i=0; i<arr->cnt; i++)
	{
		printf("%d ",arr->ptr[i]);
	}
	printf("\n");
}

}

// 排序
void sort_array(Array* arr);
// 遍历
void show_array(Array* arr)
{
	for(int i=0; i<arr->cnt; i++)
	{
		printf("%d ",arr->ptr[i]);
	}
	printf("\n");
}

}

// 排序
void sort_array(Array* arr);
// 遍历
void show_array(Array* arr)
{
	for(int i=0; i<arr->cnt; i++)
	{
		printf("%d ",arr->ptr[i]);
	}
	printf("\n");
}// 创建
Array* create_array(size_t size)
{
	// 分配表结构内存
	Array* arr = malloc(sizeof(Array));
	// 分配存储元素的内存
	arr->ptr = malloc(sizeof(TYPE)*size);
	// 记录容量
	arr->cal = size;
	// 初始化元素数量
	arr->cnt = 0;
	return arr;
}

// 销毁
void destory_array(Array* arr)
{
	free(arr->ptr);
	free(arr);
}

// 清空 
void clean_array(Array* arr)
{
	arr->cnt = 0;
}

// 插入
bool insert_array(Array* arr,int index,TYPE val)
{
	// 判断表是否已满
	if(arr->cnt >= arr->cal) return false;
	// 判断下标是否能让表中的元素保持连续
	if(index > arr->cnt) return false;

// 内存拷贝,向后移动数据
	/*for(int i=arr->cnt; i>index; i--)
	{
		arr->ptr[i] = arr->ptr[i-1];
	}*/
	memcpy(arr->ptr+index+1,arr->ptr+index,(arr->cnt-index)*sizeof(TYPE));
	
arr->ptr[index] = val;
	arr->cnt++;
	return true;

}

// 删除
bool delete_array(Array* arr,int index)
{
	if(index >= arr->cnt) return false;
	memcpy(arr->ptr+index,arr->ptr+index+1,(arr->cnt-index-1)*sizeof(TYPE));
	arr->cnt--;
	return true;
}

// 访问
bool access_array(Array* arr,int index,TYPE* val)
{
	if(index >= arr->cnt) return false;
	*val = arr->ptr[index];
	return true;
}

// 修改
bool modify_array(Array* arr,int index,TYPE val)
{
	if(index  >= arr->cnt) return false;
	arr->ptr[index] = val;
	return true;
}

// 查询
int query_array(Array* arr,TYPE key)
{
	for(int i=0; i<arr->cnt; i++)
	{
		if(arr->ptr[i] == key) return i;
	}

return -1;

}

// 排序
void sort_array(Array* arr);
// 遍历
void show_array(Array* arr)
{
	for(int i=0; i<arr->cnt; i++)
	{
		printf("%d ",arr->ptr[i]);
	}
	printf("\n");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值