线性表,顾名思义,是具有像线一样的性质的表,由零个或多个数据元素的有序序列,线性表有多种操作方式,下面我们介绍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传入函数中。