算法与数据结构c语言版基本知识总结

线性表

一.顺序表

1.顺序表的定义与基本使用

在这里插入图片描述

/*基本定义*/
#define Maxsize maxlen //maxlen表示线性表可能的最大数据元素数目
typedef int elmentype //elemtype表示数据元素类型,此处定义为int
typedef struct 
{
   
     elemtype data[Maxsize]; //存放线性表元素的数组    
      int len;       //表示线性表的长度
 }sqlist;
 
 /*两种使用方法*/
sqlist  L;//第一种使用方法,L就是顺序表
L.data[i]//顺序表中的第i个元素
L.len//顺序表的长度

sqlist *sq;//第二种使用方法,  定义指向顺序表的指针
sq=(sqlist *)malloc(sizeof(sqlist));//因为是指针,所以需要开辟空间
sq->data[i];//顺序表中的第i个元素
sq->len;//顺序表的长度

2.顺序表的基本操作

构造一个空的顺序线性表
void initlist(sqlist *L)
{
    L-> len=0; }
//算法时间复杂度:O(1)
插入算法

思路步骤(4)
1.判断线性表的存储空间是否已满,若已满,则进行“溢出”处理(判满)
2.检查i值是否超出允许的范围(1≤i≤len+1),若超出,则进行“超出”处理(判超)
3.如果上述条件都允许,则将最后一个元素到第i个元素依次向后移动一个位置(移动)
4.将新的数据元素写到第i个位置上,线性表长度+1(写入)

int insert(sqlist *L,int i,elemtype x)//将x插入第i个位置
{
   
    int j;
    if(L->len==Maxsize)//顺序表长度等于存储最大长度则满
    {
   
    printf("溢出!\n");
    return 0;
    }
    else if(i<1||i>L->len+1)//判断i是否超出范围
    {
   
    printf("插入位置不正确\n");
    return 0;
    }
    else//把第i个元素和它后面的元素后移
    {
   
      for(j=L->len;j>i-1;j--)
        L->data[j]=L->data[j-1];
       L->data[i-1]=x;//把新元素写入下标为i-1的位置
       L->len++;//顺序表长度+1
       return(1); 
}
//算法的最坏情况(插入第一个位置 i=1)时间复杂度:O(n)
//算法的最好情况(插入最后一个位置 i = L->len+1)  时间复杂度:O(1)
删除算法

思路步骤(3)(类似插入)
判断i值是否超出允许的范围(1≤i≤len),若是,则进行“超出范围”处理;
否则,保存第i个元素的值;
将第i个元素后的所有元素依次向前移动一个位置;
线性表长度减1,删除成功

int delete(sqlist *L,int i)//将x插入第i个位置
{
   
    int j
  • 25
    点赞
  • 132
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值