编写向类型为List的线性表L中第i个元素位置插入一个元素的算法,假定不需要对i的值进行有效性检查,同时不需要检查存储空间是否用完。
void Insert(LinkList& L, int i, ElemType x)
方法是将i位置及其后的元素都向后移动一个位置,然后在第i个位置写入插入值x
如果i是从0开始的,代码如下。如果是从1开始的,那么n>=i-1
void Insert(LinkList& L, int i, ElemType x)
{
for(int n=L.length-1;n>=i;n--)
L.data[n+1] = L.data[n];
L.data[i] = x;
L.length++;
}
void Insert(LinkList &L, int i, ElemType x){
for(int j=L.size-1;j>=i-1;j--)
L.list[j+1]=L.list[j];
L.list[i-1]=x;
L.size++;
}
假设题目中的List是指单链表(LinkList),则可以编写如下的算法来在链表的第i个位置插入一个元素x:
void Insert(LinkList& L, int i, ElemType x) {
// 创建一个新的节点
Node* newNode = new Node();
newNode->data = x;
newNode->next = nullptr;
// 找到第i-1个节点
Node* preNode = L;
for (int j = 1; j < i; j++) {
preNode = preNode->next;
}
// 将新节点插入到第i个节点之前
newNode->next = preNode->next;
preNode->next = newNode;
}
算法的具体步骤如下:
1.创建一个新的节点,将要插入的元素x作为节点的数据。
2.从链表的头节点L开始,遍历链表,找到第i-1个节点。
3.将新节点的next指针指向第i个节点。
4.将第i-1个节点的next指针指向新节点。
-
需要注意的是,算法假设不需要对i的值进行有效性检查,因此如果i的值不合法,可能会导致程序出现异常。此外,如果存储空间用完,可能会导致动态分配内存失败,也可能会导致程序出现异常。