顺序表

//线性表之顺序表
//对顺序表的操作可以近似看成对有序数组的操作
#include <stdio.h>
#define MIXSIZE 100
#define OK 0 
#define ERROR -1
typedef int ElemType;  //注: 此处不能用#define int ElemType;
typedef int Status;
typedef struct 
{
    ElemType data[MIXSIZE];  //MIXSIZE 是数组的长度,data[]用来存放数据
    int length;  //线性表的长度
}Sqlist;

//初始化 
//注:当对顺序表进行长度或值的改变时,应该用指针进行操作
void Initlist(Sqlist *L) //在对顺序表的初始化时,即对组成顺序表的元素:data[MIXSIZE],length进行初始化
{                       //因为data[MIXSIZE]是一个数组,而且大小已经确定,即MIXSIZE,故不需要再对数组初始化
    L->length = 0;       //只需要对顺序表的长度进行初始化,即将length赋值为0
}

//插入算法的思路
// 1、首先判断插入的位置是否合理
// 2、然后判断顺序表的长度大于或等于数组的长度,则抛出异常或动态增加容量
// 3、从最后一个元素开始向前遍历至第index个位置,并将它们都向后移一个位置,将要插入的元素放在第index位
// 4、表长加1
Status Insert_list(Sqlist *L,int index,int num)  
{
    if(L->length == MIXSIZE || index < 1 || index > (L->length+1))
    {
        printf("此时插入的位置不合理\n");
        return ERROR;
    }
    
    int i;
    for(i = L->length; i >= index; i--)
    {
        L->data[i+1] = L->data[i];        
    }
    
    L->data[index] = num;
    L->length++;
    return OK;
}
//获得顺序表中某个位置的元素
//思路;
//1、判断要获得的元素位置是否在顺序表中
//2、直接返回要获得的元素
Status Getelem(Sqlist L,int index)
{
    if(index > L.length)
    {
        printf("要获取元素的位置不存在\n");
        return ERROR;
    }
    printf("第%d位的元素为%d\n",index,L.data[index]);
    return OK;
}

//删除操作
//思路:
// 1、如果删除位置不合理,则发出警告
// 2、取出删除元素
// 3、从删除元素位置开始遍历到最后一个元素,并将它们都向前移一个位置
// 4、顺序表的长度减一
Status Delete_list(Sqlist *L,int index)
{
    if(0 == L->length)
    {
        printf("线性表为空\n");
        return ERROR;
    }
    
    if(index > L->length)
    {
        printf("要删除元素的位置不合理\n");
        return ERROR;
    }
    
    //Getelem(L,index);
    printf("被删除的元素为:%d\n",L->data[index]);
    int i;
    for(i = index; i < L->length; i++)
    {
            L->data[i] = L->data[i+1];
    }
    L->length--;
    return OK;
}

//输出顺序表
void Print(Sqlist L)
{
    int i;
    printf("下面便是顺序表中的内容\n");
    for(i = 1; i <= L.length; i++)
    {
        printf("%d ",L.data[i]);
    }
    printf("\n");
}
int main()
{
    Sqlist L;
    //ElemType e;
    Initlist(&L);
    printf("初始化后长度为:%d\n",L.length);
    //插入
    Insert_list(&L,1,1);
    printf("初始化第一个数据后长度为:%d\n",L.length);
    Print(L);
    Insert_list(&L,2,6);
    printf("初始化第二个数据后长度为:%d\n",L.length);
    Print(L);
    Insert_list(&L,3,9);
    printf("初始化第三个数据后长度为:%d\n",L.length);
    Print(L);
    Delete_list(&L,1);
    printf("删除第1个数据后长度为:%d\n",L.length);
    Print(L);
    
    Getelem(L,1);
    return 0;
}

//输出:

初始化后长度为:0
初始化第一个数据后长度为:1
下面便是顺序表中的内容

初始化第二个数据后长度为:2
下面便是顺序表中的内容
1 6 
初始化第三个数据后长度为:3
下面便是顺序表中的内容
1 6 9 
被删除的元素为:1
删除第1个数据后长度为:2
下面便是顺序表中的内容
6 9 
第1位的元素为6
 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

zxa1334

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值