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

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

#include
#include
#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;ilength;i++){ p->data[i - 1] = p->data[i]; } p->length--; return 0; } //查找索引 int findnum(SeqList *p,int num){ for(i = 0;ilength;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

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/564084.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-03
下一篇 2022-04-03

发表评论

登录后才能评论

评论列表(0条)