线性表的插入操作,结构体指针

       线性表,顾名思义,是具有像线一样的性质的表,由零个或多个数据元素的有序序列,线性表有多种操作方式,下面我们介绍ListInsert的代码

算法思路:       

       从最后一个元素遍历至第i个位置,分别将他们向后移动一个位置,将要插入的元素填入第i个位置。

注意点:

1.遍历应该从后往前 ,若从i向后遍历,将会将后面元素全部复写为i元素代表的数值。

2.需要注意若插入位置不合理则抛出异常,若线性表长度大于数组长度也应抛出异常。

下面介绍C语言写法 

#define OK 1  
#define ERROR 0  
#define MAXSIZE 20  
#include <stdio.h>  

typedef int Status;

typedef struct
{
    int data[MAXSIZE];
    int length;
} SqList;

Status ListInsert(SqList* L, int i, int e)
{
    if (L->length == MAXSIZE)
        return ERROR;
    if (i < 1 || i > L->length + 1)
        return ERROR;
    for (int k = L->length; k >= i-1; k--)
        L->data[k] = L->data[k - 1];
    L->data[i - 1] = e;
    L->length++;
    for (int j = 0; j < L->length; j++)
        printf("%d ", L->data[j]);
    printf("\n");
    return OK;
}

int main()
{
    SqList eL = { {10, 9, 8, 7, 6}, 5 }; 
    SqList* pL = &eL;
    int i, e;
    scanf_s("%d", &i);
    scanf_s("%d", &e);
    ListInsert(pL, i, e);
    return 0;
}

这里我们运用到的C语言知识点有:宏的使用,结构体指针,for循环等,后文将详细回顾结构体指针相关知识。

 代码注意事项:

1.在向函数ListInsert传入参数时我们传入的是指针形式,因为在函数内部我们需要对参数进行更改。

2.for 循环中循环条件表达式一定是i-1,这是由于线性表的起始下标是1,而对应数组下标从0开始。

3.打印一个数组需要通过for循环来实现。

def ListInsert(L, i, e, MAXSIZE):
    if len(L) >= MAXSIZE:
        return False
    if i < 1 or i > len(L) + 1:
        return False
    L.append(None)
    for j in range(len(L) - 1, i-1, -1):
        L[j] = L[j - 1]
    L[i - 1] = e
L = [1, 2, 3, 4, 5, 6]
MAXSIZE = int(input("请输入列表最大长度: "))
i, e = map(int, input("请输入插入位置和元素(用逗号分隔): ").split(","))
ListInsert(L, i, e, MAXSIZE)
print(L)

 这段代码由python编写,在python中我们其实可以直接使用insert函数进行修改。

 C语言中的结构体(Struct)是一种复合数据类型,允许你将多个不同类型的项组合成一个单一的类型。由struct声明结构体,typedef为结构体创建别名。

案例分析

#include<stdio.h>
typedef struct Birthday
{
	int year;
	int month;
	int day;
}Birthday;
typedef struct Student
{
	char name[50];
	int age;
	float score;
	Birthday birthday;
}Student;
void StudentprintInfo(Student* pstu)
{
	printf("%s,%d,%d,%d,%d,%d", pstu->name, pstu->age, pstu->score,
		pstu->birthday.year, pstu->birthday.month, pstu->birthday.day);
}
int main()
{
	Student stu1 = { "张三",20,100,{2004,8,23} };
    Student* pstu = &stu1;
	StudentprintInfo(pstu);
	return 0;
}

1.首先我们设置了两个结构体分别为Biryhday,Student,内部记录了有关生日和学生的信息。

由typedef使用方法可知我们命名了他们的名字。并在Student中嵌套了birthday.

2.StudentprintInfo函数中传入了Student类型的指针pstu,传入指针在函数中通过箭头->来访问其内部数据,但是获取Student中Birthday的信息通过点操作符来完成。

3.主函数中首先设置一个Student的变量,我们可以把这个看作python中的对象实例,第二步创建一个指针pstu,注意此时取地址为创建的变量名(就像&a,&b一样,不会写&int),第三步传参将pstu传入函数中。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值