#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));