数据结构1 - 速写一个线性表 About Linear List

1.实为数组,只不过以结构体形式出现,而多出来一个长度,并且可以定义出指针(--同数组名)

这里只谈写法,暂不谈概念oOAOo

2023.4.5 --想把这个叫做--"快速写一个线性表"(写文的目的也是方便自己以后再次快速的实现出来)

2.定义四板

(一) typedef板

typedef struct LNode *List;

(二) struct板

struct LNode{
    //数组类型 可以是int double...
    int Data[MAXSIZE]; // 当然你得在前面就定义一个MAXSIZE
    //长度
    int Last;
};

 (三) LNode建 (线性表)

LNode L;

 (四) List建(指针)

List PtrL;

 3.初始化

List MakeEmptyList()
{
    //先在此函数内建立一个指针
    List L;
    //用该指针指向创建出的空间(malloc法)
    //2023.4.5-- 前指针后结构体
    L = (List) malloc (sizeof(struct LNode));
    //判断是否申请空间成功
    if(L == NULL)
        return NULL;
    //再将此指针的last 赋上 -1 (表示数组数据为空)
    //因为要使下标从零开始
    L->Last=-1;
    //返回此L
    return L;
}

 接下来是操作这个表--增删改查

1) 查找

int Find(int x, List PtrL)
{
    //用i做下标 while来查找
    int i=0;
    while(i <= PtrL->Last && PtrL[i] != x)
        i++;
    //超出表长的判断
    if(i > PtrL->Last) return -1;
    else return i;
}

2)插入

//用bool 以返回true or false 来判断是否插入成功
bool Insert(int x, int i, List PtrL)
{
    int i;
    //1)先判Last == MAXSIZE - 1 (表满)
    if(PtrL->Last == MAXSIZE - 1)
    {
        cout<<"线性表已满"<<endl;
        return false;
    }
    //2)再判插入位置 i < 1 || i > Last + 1
    if(i < 1 || i > PtrL->Last + 1)
    {
        cout<<"插入位置不合法"<<endl;
        return false;
    }
    //3)开始移动 j 从Last开始 到 i-1
    for(int j = PtrL->Last ;j >= i-1 ;j--)
    {
        Data[j+1]=Data[j];
    }
    //4)此时 i-1 的位置空了出来,将x放进去即可
    Data[i-1] = x;
    //5)最后莫忘了要将表长加长 PtrL->Last++
    PtrL->Last++;

3)删除

void Delete(int i, List PtrL)
{
    //1)同样的 判断删除位置合不合理
    if(i < 1 || i > PtrL->Last)
    {
        cout<<"删除位置不合法"<<endl;
        return;
    }
    //2)开始循环 定义j 从i-1 到 Last
    for(int j = i-1;j<PtrL->Last;j++)
    {
        Data[j]=Data[j+1];
    }
    //最后将Last--即可
    PtrL->Last--;
}

以上是个人在学习过程中的一些总结,有错误和遗漏请加以指出错误,感谢!


交流与学习提升技术,一起向上!

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值