王道数据结构2022代码
单链表
用代码定义一个单链表
//用代码定义一个单链表
struct LNode{
ElemType data; //数据域,定义单链表的节点类型
struct LNode *next; //指针域,指针指向下一个结点
};
//增加一个新的节点,在内存中申请一个结点所需空间,并用指针*p指向这个结点
struct LNode *p = (struct LNode*)malloc(sizeof(struct LNode));
不带头节点的单链表
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
//初始化一个空链表
bool InitList(LinkList &L){
L = NULL; //空链表,暂时没有其他节点
}
//判断单链表是否为空
bool Empty(LinkList L){
if(L->next == NULL) return true;
else return false;
}
void test(){
LinkList L;
InitList(L);
}
插入
按位序插入(带头结点)
//按位序插入,在表中的第i个位置插入元素e
//带头节点
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
bool ListInsert(LinkList &L,int i,ElemType e){
if(i < 1){
return false;
}
LNode *p; //指针p指当前扫描到的结点
int j = 0; //当前p指向的第几个结点
p = L; //L指向头结点,头结点是第0个结点,不存数据
while(p!=NULL && j<i-1){
p = p->next;
j++;
}
if(p==NULL){
//i值不合法
return false;
}
LNode *s = (LNode*)malloc(sizeof(LNode));
s->data = e;
s->next = p->next;
p->next = s; //s连接到p结点之后
return true;
}
分析:
- 如果i = 1(插在表头)
时间复杂度:O(1) - 插在表尾
时间复杂度:O(n)
平均时间复杂度:O(n)
插入位置 | 时间复杂度 |
---|---|
插在表头 | O(1) |
插在表尾 | O(n) |
按位序插入(不带头结点)