单链表:线性表的链式存储,通过任意的存储单元来存储线性表中的数据元素。
| data 数据 | next 指针 |
优点:不需要大片的连续的空间,改变容量方便。
缺点:不可随机读取,要耗费一定空间存放指针。
一、单链表的创建
1、头插法
LinkList List_HeadInsert(LinkList &L){
LNode *s;
int x;
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
scanf("%d",&x);
while(x!=999){
s=(LNode*)malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next=s;
scanf("%d",&x);
//TODO
}
return L;
}
2、尾插法
LinkList List_TailInsert(LinkList &L){
int x;
LNode *s,*r;
L = (LinkList)malloc(sizeof(LNode));//初始化单链表,创建头指针
s,r=L;
scanf("%d",&x);
while(x!=999){
s=(LNode*)malloc(sizeof(LNode));
s->data = x;
r->next = s;
r = s;
scanf("%d",&x);
//TODO
}
r->next = NULL;//尾结点指针置空
return L;
}
二、单链表的查找
1、按位查找
LNode *GetElem(LinkList &L,int i){
int j=1;
LNode *p=L->next;
if(i==0){
return L;
//TODO
}
if(i<0){
return NULL;
//TODO
}
while(p!=NULL&&j<i){
p=p->next;
j++;
//TODO
}
// printf("%d\n",p->data);
return p;
}
2、按值查找
LNode *LoacateElem(LinkList &L,int e){
LNode *p=L->next;
while(p!=NULL&&p->data!=e){
p=p->next;
//TODO
}
return p;
}
三、单链表的插入
1、按位插入
bool Insert(LinkList &L,int i,int e){
LNode *p = GetElem(L,i-1);
LNode *s = (LNode*)malloc(sizeof(LNode));//开辟成功就返回该空间的首地址 因为malloc函数的返回值为void*,所以需要强制类型转换为对应类型。
s->data = e;
s->next = p->next;
p->next = s;
return true;
}
2、按节点插入
bool ForeInsert(LNode *p,int e){//若使用给定节点的前插操作,事件复杂度O(n)
if(p==NULL){ //这里采用先将要插的节点插入p的后面,然后再交换数据的方法,事件复杂度为O(1)
return false;
//TODO
}
LNode *s = (LNode*)malloc(sizeof(LNode));
if(s==NULL){
return false;
//TODO
}
s->next = p->next;
p->next = s;
s->data = p->data;
p->data = e;
return true;
}
四、单链表的删除
1、按位删除
bool DeleteList(LinkList &L,int i,int &e){
LNode *p = GetElem(L,i-1);
LNode *q = GetElem(L,i);
p->next = q->next;
e = q->data;
free(q);
return true;
}
2、按节点删除
bool DeleteNode(LNode *p){//指向最后一个节点时需要特殊处理
if(p==NULL){
return false;
//TODO
}
LNode *q = p->next;
p->data = q->data;
p->next = q->next;
free(q);
return true;
}
五、单链表的长度
int length(LinkList &L){
int length = 0;
LNode *p = L;
while(p->next!=NULL){
p=p->next;
length++;
//TODO
}
return length;
}
本文详细介绍了单链表的创建、查找、插入、删除及长度计算等基本操作,包括头插法、尾插法、按位查找、按值查找、按位插入、按节点插入、按位删除和按节点删除。通过实例代码演示了这些操作的实现,帮助读者深入理解链表数据结构。
4452

被折叠的 条评论
为什么被折叠?



