C语言关于顺序表的整理

一、结构体的创建

struct list
{
 int* data;
 int length;
 int capacity;
};

二、顺序表初始化函数

开辟一个结构体空间,并对其中的数据开辟空间来储存元素

#define  Type int
//顺序表初始化
struct list* list_init()
{
 struct list* temp = (struct list *)malloc(sizeof(struct list));
 temp->data = (Type *)calloc(MAX_SIZE, sizeof(Type));
 temp->length = 0;
 temp->capacity = MAX_SIZE;
 return temp;
}

三、顺序表增删查改功能函数的实现

1、元素逐个增加

//元素逐个增加
void list_add(struct list * arr,int elem)
{
 if (arr->length < arr->capacity)
 {
  arr->data[arr->length++] = elem;
 }
 else
  printf("error");
}

2、指定位置插入元素

void list_insert(struct list * arr, int index,int elem)
{
 if (arr == NULL)
 {
  printf("顺序表为空");
 }
 if (arr->length < arr->capacity)
 {
  int i = arr->length++;
  for (; i >= index; i--)
  {
   arr->data[i] = arr->data[i-1];
  }
  arr->data[i] = elem;
 }
}

3、删除全部元素

void list_clear(struct list * arr)
{
 if (arr == NULL)
 {
  printf("顺序表为空");
 }
 for (int i = 0; i < arr->length; i++)
 {
  arr->data[i] = 0;
 }
 arr->length = 0;
}

4、删除指定位置元素

void list_delete(struct list * arr ,int index )
{
 if ( arr == NULL)
 {
  printf("顺序表为空");
 }
 int i = index-1;
 for (; i < arr->length-1; i++)
 {
  arr->data[i] = arr->data[i + 1];
 }
 arr->length--;
}

5、检查顺序表是否为空

void list_empty(struct list * arr)
{
 if (arr == NULL || arr->length ==0)
 {
  printf("顺序表为空");
 }
 else
  printf("顺序表不为空");
}

6、修改指定位置的值

//元素修改
void list_alter(struct list * arr,int index,int elem)
{
 if (arr == NULL)
 {
  printf("顺序表为空");
 }
 arr->data[index - 1] = elem;
}

7、元素的输出

//输出顺序表元素
void list_out(struct list * arr)
{
 if (arr == NULL)
 {
  printf("顺序表为空");
 }
 for (int i = 0; i < arr->length; i++)
 {
  printf("%d\t", arr->data[i]);
 }
 printf("\n");
}

8、释放顺序表空间

//释放空间
void list_free(struct list * arr)
{
 if (arr != NULL)
 {
  if (arr->data != NULL)
  {
   free(arr->data);
  }
  free(arr);
 }
}

四、顺序表各函数的调用

void test()
{
 struct list* arr1 = list_init();
 int elem,index;
 printf("请输入要输入的元素");
 for (int i = 0; i < 10; i++)
 {
  scanf("%d", &elem);
  list_add(arr1,elem);
 }
 list_out(arr1);
 printf("请输入增加的元素和位置:\n");
 scanf("%d %d",&elem, &index);
 list_insert(arr1, index,elem);
 printf("请输入要删除元素的位置:\n");
 scanf("%d", &index);
 list_delete(arr1, index);
 list_out(arr1);
 list_free(arr1);
}

int main()
{
 test();
 return 0;
}

本文为复习所写,函数经测试都可以用,用兴趣的可以调用一下,有错误的地方欢迎大佬指正

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值