数据结构之线性结构(连续存储-静态链表篇)

本文介绍使用C语言实现静态链表的方法,包括初始化、判断空满状态、显示、追加、插入、删除元素及逆置操作。适用于初学者了解线性结构及数组应用。

数据结构-线性结构-连续存储-静态链表(数组)

C语言实现:

头文件:

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

结构体构造类型:

typedef struct 
{
  int *base;//存储数组首地址
  int len;//数组空间大小
  int cnt;//数组中有效元素个数
}ARR;

功能接口:

  • 初始化数组
void Init_arr(ARR *pa,int lenth)
{
  pa->base=(int *)malloc(sizeof(int )*lenth);//申请堆内空间
  assert(NULL!=pa->base);//验证申请成功与否
  pa->len=lenth;//数组长度
  pa->cnt=0;//初始化有效元素为0
}
  • 判断数组是否为空
bool Is_empty(ARR *pa)
{
  if(0==pa->cnt)//若数组有效元素个数为0,说明为空
    return true;
  else//否则不空
    return false;
}
  • 判断数组是否为满
bool Is_full(ARR *pa)
{
  if(pa->len==pa->cnt)//若有效元素个数等于空间大小,说明已满
      return true;
  else//否则不满
    return false;
}
  • 显示数组
void Show_arr(ARR *pa)
{
  if(Is_empty(pa))
  {
     printf("Array is empty!\n");
     return;
  }
  else
  {
     int i;
     for(i=0;i<pa->len;++i)
     {
        printf("%d ",(pa->base)[i]);
     }
     putchar(10);
  }
  return ;
}
  • 追加元素
int Append(ARR *pa,int value)
{
   if(Is_full(pa))
   {
       printf("Array is full!\n");
       return 0;
   }
   else
   {
       pa->base[pa->cnt]=value;
       (pa->cnt)++;
   }
   return 0;
}
  • 插入元素
int Insert_arr(ARR *pa,int pos,int value)//插入位置从1开始
{
   assert(pos>0);//验证插入位置pos的合法性
   if(Is_full(pa))//验证是否为满
   {
      printf("Array is full!\n");
      return 0;
   }
   else
   {
    //从第pos个元素到第pa->cnt个元素全部往后移动一个单位,
    //因此,当pos>pa->cnt时,循坏不执行。

      for(int i=pa->cnt-1;i>=pos-1;--i)
      {
         (pa->base)[i+1]=(pa->base)[i];
      }
      (pa->base)[pos-1]=value;
   }
   return 0;
}
  • 删除元素
int Delete_arr(ARR *pa,int pos) 
{
  assert(pos>0&&pos<=pa->cnt);
  if(Is_empty(pa))
  {
    printf("Array is empty!\n");
    return 0;
  }
  else
  {
    for(int i=pos;i<pa->cnt;++i)
    {
       pa->base[i-1]=pa->base[i];
    }
    pa->cnt--;
  }
  return 0;
}
  • 逆置
int Inverse(ARR *pa)
{
  for(int i=0;i<pa->cnt/2;++i)
  {
     int temp=(pa->base)[i];
     (pa->base)[i]=(pa->base)[pa->cnt-i-1];
     (pa->base)[pa->cnt-i-1]=temp;
  }
  return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值