顺序表操作

C语言-顺序表的动态分配

关于顺序表的增删改

1、有返回值函数

#include<stdio.h>
#include<stdlib.h>

// 一般线性表的顺序查找
typedef struct{
	int *data;
	int size,length;
}SeqList;

// 初始化
SeqList InitList(SeqList L)
{
	L.data = (int *)malloc(sizeof(int)*10);
	L.length = 0;
	L.size = 10; 
	return L;
}

// 存入数据
SeqList Insert(SeqList L)
{
	printf("请输入值:");
	for(int i = 0;i < L.size;i++)
	{
		printf("data[%d]:",i);
		scanf("%d",&L.data[i]);
		L.length++;
	}		
	return L;
}

// 打印数据
SeqList Print(SeqList L)
{
	for(int i = 0;i < L.size;i++)
	{
		printf("data[%d]:",i);
		printf("%d",L.data[i]);
		printf("   ");
	}
	return L;
}

// 删除数据
SeqList Del(SeqList L,int a){
	int h = 0;
	for(int i = 0;i <= L.length;i++){
		if(L.data[i] == a){
			h = i;
			while(h < L.length){
				L.data[h] = L.data[h + 1];
				h++;
			}
			L.length--;
		}
	}
	return L;	
}

int main()
{
	SeqList L; 
	L = InitList(L);
	L = Insert(L);
	L = Del(L,5);
	L = Print(L);
	return 0;
}


2、没有返回值函数

#include<stdio.h>
#include<stdlib.h>

// 一般线性表的顺序查找
typedef struct{
int *data;
int size,length;
}SeqList;

// 初始化
int InitList(SeqList *L)
{
L->data = (int *)malloc(sizeof(int)*10);
L->length = 0;
L->size = 10; 
return 0;
}

// 存入数据
int Insert(SeqList *L)
{
printf("请输入值:");
for(int i = 0;i < L->size;i++)
{
printf("data[%d]:",i);
scanf("%d",&L->data[i]);
L->length++;
}		
return 0;
}

// 打印数据
int Print(SeqList *L)
{
for(int i = 0;i < L->size;i++)
{
printf("data[%d]:",i);
printf("%d",L->data[i]);
printf("   ");
}
return 0;
}

int main()
{
SeqList L; 
InitList(&L);
Insert(&L);
Print(&L);
return 0;
}

总结:关于顺序表的动态分配问题,存在以下几点:
(1)顺序表在定义结构体变量的时候要注意,SeqList后面没有*
(2)在main中新定义的函数的实际参数要根据上面代码的形式参数相对应。
如果上边定义为int Print(SeqList *L),那么在调用的时候为Print(&L),且使用->来访问结构体中的各个元素。
如果上边定义为SeqList Print(SeqList L),那么在调用的时候为Print(L),且使用.来访问结构体中的各个元素,访问函数结束后要用return进行返回,否则原来创建好的结构体将不会发生任何改变。
(3)在定义顺序表的过程中,要注意以下两种方式是差不多的。(还是有细微的区别)。重点关注typedef的使用

typedef struct{

}SeqList;

上面这种方法在main中定义的时候为SeqList L;
上面这种方法在定义函数时候形式参数为int Print(struct SeqList L),当然用L还是L和这两种定义方式没有什么关系

struct SeqList{

};

上面这种方法在main中定义的时候为struct SeqList L;
上面这种方法在定义函数时候形式参数为int Print(SeqList L),当然用L还是L和这两种定义方式没有什么关系

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值