单链表是一种线性表的数据结构,其中每个元素(节点)包含数据和指向下一个元素的指针;
头节点—> | 元素1—> | ... | 元素n—> | 尾节点 |
特点:1.不要求大片连续的存储空间,即逻辑上连续,物理(存储空间)上可以不连续; 2.改变容量方便; 3.插入与删除方便; 4.不能随机访问,如果想要访问只能进行遍历; 5.有头节点与尾节点,一般指向NULL;
定义:由一个记录元素值的整数型变量data和一个指针构成,以下简记为:链表名(元素—>);
输入:提供一个要进行输入的单链表和一个记录长度的整数型变量n,接着循环n次依次输入, 输入前:L(头节点)(NULL—>)。。。。。 需输入的:s(x—>) 输入:L—>x—>。。。。。 代码即:s.data=x; s—>next=L—>next; L—>next=s;
按位查找:提供一个要进行输入的单链表和查找的位数element,健壮性判断:如果要查的位数小 于0,返回无; 循环element次,另一循环条件为L(保证L不为空),每次循环让L等于L的下一位(L=L—>next);
插入:与输入的原理相似 ;先找到要插入的那一位p,然后定q为p的下一位;element为要插入的元 素;插入前:—>p—>q—>。。。 要插入的:s(element—>) 插入:p—>next=s; s—>next=q;
按值查找与按位查找原理一样;
#include <iostream>
using namespace std;
typedef int ElemType;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*linklist/*链表*/;
void List_head_insert(linklist &L,int n){//输入
L=(linklist)malloc/*开辟一片内存空间*/(sizeof(LNode));
L->next=NULL;
ElemType x;
LNode *s;
for(int i=1;i<=n;i++){
cin>>x;
s=(linklist)malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next=s;
}
}
linklist GetElem(linklist L,int element){//按位查找
if(element<0)return NULL;
int j=0;
while (L&&j<element){
L=L->next;
j++;
}
return L;
}
bool Listinsert(linklist L,int i,ElemType element){//插入
linklist p=GetElem(L,i-1);
if(p==NULL)return false;
linklist q=(linklist)malloc(sizeof(LNode));
p->next=q->next;
p->next=q;
q->data=element;
return true;
}
void cout_list(linklist L){//输出
L=L->next;
while (L!=NULL){
cout<<L->data<<" ";
L=L->next;
}
}
linklist LocateElem(linklist L,ElemType element){//按值查找
while(L){
if(L->data==element)
return L;
L=L->next;
}
return NULL;
}
int main(){
}