动态顺序表的基本功能(c语言实现)

本文介绍了使用C语言实现动态顺序表的基本操作,包括创建、插入、删除和查找元素等。通过实例展示了如何动态管理内存,以适应数据规模的变化,同时讨论了相关数据结构的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

#include<stdio.h>
#include<stdlib.h>
#define Initsize 10//长度的初始定义 
//#define Maxsize 10	//最大长度 
#define addlen 5

int i;

//静态定义顺序表 
//typedef struct{
//	int date[Maxsize];//顺序表元素 
//	int length;	//顺序表长度 
//}SqList;

//动态定义顺序表 
typedef struct{
	int *data;		//顺序表的数据元素 
	int length,Maxsize;		//最大范围和长度 
}SeqList;

//静态定义顺序表
//typedef strucst{
//	int arr[Maxsize]
//	int length;
//}SqList; 

//初始化顺序表
void Initial(SeqList *p){
	p->data = (int*)malloc(sizeof(int)*Initsize);//动态初始化最重要的一步,开辟连续的空间 
	p->Maxsize = Initsize;
	p->length = 0;
} 
//将顺序表加长  1、开辟空间 2、复制元素  3、最大长度加长 4、释放空间 
void incrlen(SeqList *p,int len){
	int *temp = p->data;
	p->data = (int*)malloc(sizeof(int)*(p->length + len));
	for(i = 0;i < p->length;i++){
		p->data[i] = temp[i];	//元素的复制 
	}
	p->Maxsize = p->Maxsize + len;	//最大长度加长 
} 

//增加元素
int add(SeqList *p,int num){
	int temp = p->length;
	if(p->length < p->Maxsize){
		p->data[temp-1] = num;
	}
	else{
		incrlen(p,addlen);
		p->data[temp] = num;
	}
	//增加一个元素,长度加一。 
	p->length = temp + 1;
	return 1;
} 

//删除元素
int delete(SeqList *p,int num,int *deletenum){
	if(num<1||num>p->length){
		printf("不在范围内\n");
	}
	*deletenum = p->data[num - 1];
	for(i = num;i<p->length;i++){
		p->data[i - 1] = p->data[i];
	}
	p->length--;
	return 0;
}

//查找索引 
int findnum(SeqList *p,int num){
	
	for(i = 0;i<p->length;i++){
		if(num == p->data[i]){
			printf("您要找的值索引是%d\n",i);
			return 1;
			}
		}
		printf("没有找到\n");
		return 0; 
	} 

//插入元素	1、要插入的位置	2、后移	3、赋值 
int Insert (SeqList *p,int index,int num){
	if(index < 1){
		printf("what the fucking doing?\n");	//加在几号位序 
	}
	if(p->length>=p->Maxsize){
		incrlen(p,5);	//表的大小不够就加 
		} 
	for(i = p -> length;i >= index;i--){		//从后往前数,索引前的数都不需要动 
		p->data[i] = p->data[i - 1]; 			//前面的赋值给后面的 
	}
	p->data[index - 1] = num;					//将数组下标减一得到相应的位序,再赋值 
	p->length++;
	return 1;
} 
int main (){
	int arr[] = {1,2,3,4,5,6,7,8,9,10};
	int deletenum = 0;
	SeqList list;	//创建一个顺序表 
	Initial(&list);
	//输出顺序表的值 
	for(i = 0;i < Initsize ;i++){
		list.data[i] = arr[i];	//list.data[i] 等价于 *(list.data + i)指针以int为单位偏移 
		list.length++;
		printf("%d\n",list.data[i]);
	}
	printf("遍历数组---------------\n");
//		incrlen(&list,addlen);
	add(&list,11);
	for(i = 0;i<list.length;i++){
		printf("%d\n",list.data[i]);
	}
	printf("添加完元素---------------\n");
	printf("%d\n",list.Maxsize);
	printf("看最大长度---------------\n");
	Insert(&list,1,12);
	for(i = 0; i<list.length;i++){
		printf("%d\n",list.data[i]);
	}
	printf("插入完元素---------------\n");
	delete(&list,5,&deletenum);
	for(i = 0; i<list.length;i++){
		printf("%d\n",list.data[i]);
	}
	printf("删除的元素是%d\n",deletenum);
	printf("删除完元素---------------\n");
	findnum(&list,9);
	printf("找一个元素---------------完成\n");
	return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值