数据结构顺序表
代码
#include<stdio.h>
#include<stdlib.h>
//给变量起一个别名,方便后面修改
typedef int E;
typedef struct List * ArrList;
//创建结构体顺序表
struct List {
E *arr;//数组当顺序表
int capacity;//数组容量
int size;//已存储的元素数量
};
//顺序表初始化
//变量顺序表
int initList(ArrList list)
{
list->capacity = 10;
list->arr = malloc(sizeof(E) * list->capacity);
//判断申请空间是否成功
if(list->arr==NULL)
{
return 0;
}
list->size = 0;
return 1;
}
//顺序表插入元素
//变量顺序表,插入的元素,插入的位序
//时间复杂度O(n)
int insertList(ArrList list,E element,int index)
{
//位序不合理插入失败
if(index<1||index>list->size+1)
{
return 0;
}
//顺序表满了扩容
if(list->capacity==list->size)
{
//变成原来的1.5倍
//x>>1变成x的一半,x<<1变成x的一倍
int newCapacity = list->capacity + (list->capacity>>1);
E* newarr=realloc(list->arr,newCapacity*sizeof(E));
if(newarr==NULL)
{
//扩容失败
}
else
{
//扩容成功
list->arr=newarr;
list->capacity=newCapacity;
}
}
for(int i = list->size;i>=index;i--)
{
list->arr[i] = list->arr[i-1];
}
list->arr[index-1]=element;
list->size++;
return 1;
}
//顺序表删除元素
//变量顺序表,删除的位序
//时间复杂度O(n)
int deleteList(ArrList list,int index)
{
//位序不符合删除失败
if(index<1||index>list->size)
{
return 0;
}
for(int i = index-1;i<list->size-1;i++)
{
list->arr[i]=list->arr[i+1];
}
list->size = list->size--;
return 1;
}
//获取顺序表长度
//变量顺序表
int sizeList(ArrList list)
{
return list->size;
}
//获取顺序表位序元素
//变量顺序表,位序
//时间复杂度O(1)
int getList(ArrList list,int index)
{
//位序不合理获取失败
if(index<1||index>list->size)
{
return NULL;
//获取失败
}
else
{
return list->arr[index-1];
}
}
//寻找某个元素出现位置(多次找第一个)
//变量顺序表,要找的元素
int findList(ArrList list,E element)
{
for(int i = 0;i<list->size;i++)
{
if(list->arr[i]==element)
{
return i+1;
}
}
//没找到
return -1;
}
void printList(ArrList list)
{
for(int i = 0;i<list->size;i++)
{
printf("%d ",*list->arr);
list->arr++;
}
}
int main()
{
//创建一个顺序表
struct List list;
//顺序表初始化
if(initList(&list))
{
//初始化成功
printf("创建顺序表成功\n");
}
else
{
printf("创建顺序表失败,请查找原因\n");
//初始化失败
}
//测试插入数据
for(int i = 1;i<10;i++)
{
insertList(&list,i,i);
}
//打印链表
printList(&list);
//打印链表长度
printf("%d",sizeList(&list));
return 0;
}
运行结果
创建顺序表成功
1 2 3 4 5 6 7 8 9
9
代码说明
详细说明见代码注释
代码功能
顺序表初始化
顺序表插入元素
顺序表删除元素
获取顺序表长度
获取指定位序顺序表元素
寻找指定元素(有多个只找第一个)
打印顺序表
备注
所有功能注释均有说明
main函数为测试函数输出,为测试全部,经测试为可运行
代码部分可全部复制粘贴进行测试