顺序表的实现——动态分配, 顺序表的按值查找,顺序表的按值查找,结构体类型的比较,typedef关键字的使用

#include<stdlib.h>    //malloc、free的头文件 
#define InitSize 10   //默认的最大长度
typedef struct
{
	int *data; //指示动态分配数组的指针 
    int MaxSize; //顺序表的最大容量
	int length;  //顺序表的当前长度 
}SeqList;

int main()
{
	SeqList L;  //声明一个顺序表
	InitList(L);//初始化顺序表
	//往顺序表中随便插入几个元素
	IncreaseSize(L,5);
	return 0; 
 } 
 
 
 void InitList(SeqList &L)
 {
 	//用malloc函数申请一片连续的存储空间
    L.data=(int*)malloc(InitSize*sizeof(int));
    L.length=0;
    L.MaxSize=InitSize;
 }
 
 //增加动态数组的长度
 void IncreaseSize(SeqList &L,int len)
 {
 	int *p=L.data;
 	L.data=(int *)malloc((L.MaxSize+len)*sizeof(int));
 	for(int i=0;i<L.length;i++)
 	{
 		L.data[i]=p[i];   //将数据复制到新区域 
	 }
 	L.MaxSize=L.MaxSize+len;//顺序表最大长度增加len 
 	free(p);                //释放原来的内存空间 
  } 

顺序表的按值查找

LocateElem(L,e):按值查找操作。在顺序表L中查找第一个元素值等于e的元素,并返回其位序。从第一个元素开始依次往后检索。时间复杂度最好的是O(1),最坏/平均都是O(n)

顺序表的按位查找

GetElem(L,i):获取表中第i个位置的元素的值,用数组下标即可得到第i个元素L.data[i-1]。时间复杂度最好/最坏/平均时间复杂度都是O(1)。

#define InitSize 10
typedef struct
{
	Elemtype *data;  //指示动态分配数组的指针
	int MaxSize;   //顺序表的最大容量
	int length;    //顺序表的当前长度 
} SeqList; //顺序表的类型定义(动态分配方式) 

//在顺序表L中查找第一个元素值等于e的元素,并返回其位序 
int LocateElem(SeqList L,Elemtype e)
{
	for(int i=0;i<L.length;i++)
	   if(L.data{i}==e)
	      return i+1;   //数组下标为i的元素值等于e,并返回其位序i+1 
	return 0;  //退出循环,查找失败 
}

结构体类型的比较

在c语言中,结构体的比较不能直接用“==”,而是需要对比各分量来判断两个结构体是否相等
 

typedef struct
{
	int num;
	int people;
} Customer;

void test()
{
	Customer a;
	a.num=1;
	a.people=1;
	Customer b;
	b.num=1;
	b.people=1;
	if(a==b)             
	{
		printf("相等");
	}
	else
	{
		printf("不相等");
	}
}

以上这种比较是错误的,在c语言中,结构体的比较不能直接用“==”
而是需要对比各分量来判断两个结构体是否相等

//对以上结构体重新进行比较
if(a.num==b.num &&a.people==b.people)
{
	printf("相等");
}
else
{
	printf("不相等");
}

typedef关键字——数据类型重命名

如下,把struct LNode 重命名为LNode,这样在后续代码中编写更为方便

typedef <数据类型><别名>

typedef struct LNode LNode;
LNode *p=(LNode *)malloc(sizeof(LNode));

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值