插入:
删除:
线性表的链式存储特点:
链表是一种顺序存取结构,按位置访问链表中第i个元素时,只能从表头开始依次向后遍历链表,直到找到第i个位置上的元素,时间复杂度为O(n), 即取值操作的效率低。但在确定插入或删除的位置后,插入或删除操作无需移动数据,只需要修改指针, 时间复杂度为0(1)。
基于此,若线性表的主要操作是和元素位置紧密相关的这类取值操作,很少做插入或删除时, 宜采用顺序表作为存储结构。 对于频繁进行插入或删除操作的线性表,宜采用链表作为存储结构。
代码如下:
注意:删除算法中的循环条件(p->next&&j<i-1)和插入算法中的循环条件(p&&(j<i-1))是有所区别的。因为插入操作中合法的插入位置有n+l个,而删除操作中合法的删除位置只有n个。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MAXSIZE 100
#define ElemType int
#define Status int
//单链表的数据结构
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode, *LinkList;
//初始化
int InitList(LinkList &L)
{
L = (LNode *)malloc(sizeof(LNode));
L->next = NULL;
return 1;
}
//输出
void PrintList(LinkList L)
{
printf("当前单链表的所有元素:");
LNode *p;
p = L->next;
while (p != NULL)
{
printf("[%d] ", p->data);
p = p->next;
}
printf("\n");
}
//尾插法创建单链表
int Create(LinkList &L)
{
int n, e;
LNode *temp = L;//声明一个指针指向头结点,用于遍历链表
printf("请输入要输入元素的个数:")