链表概念
线性表的链式存储叫做单链表,它是指通过一组任意的存储单元来存储线性表中的数据元素。
链表的初始化
初始化为:
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
链表的头插法
代码:
s->next=L->next;
L->next=s;
尾插法
代码:
r->next=s;
r=s;
插入节点
代码:
p=getelem(L,i-1)
s->next=p->next
p->next=s
删除节点:
代码:
p=getelem(L,i-1)
q=p->next
p->next=q->next
free(q)
以上所有功能的总合:
#include<iostream>
#include<stdlib.h>
using namespace std;
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void List_head_Insert(LinkList &L)//头插法 时间复杂度O(n)
{
L=(LinkList)malloc(sizeof(LNode));//(LNode*)//头指针的存储空间
L->next=NULL;
ElemType x;
cin>>x;
LNode *s;
while(x!=9999)
{
s=(LinkList)malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next=s;
cin>>x;
}
}
void List_tail_Insert(LinkList &L)//尾插法
{
L=(LinkList)malloc(sizeof(LNode));//(LNode*)//头指针的存储空间
L->next=NULL;
ElemType x;
cin>>x;
LNode *s,*r=L;
while(x!=9999)
{
s=(LinkList)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
cin>>x;
}
r->next=NULL;
}
LinkList GetElem(LinkList L,int element)//按序号查找
{
if(element<0)return NULL;
int j=0;
while(L&&j<element)
{
L=L->next;
j++;
}
return L;
}
LinkList LocateElem(LinkList L,ElemType element)//按值查找
{
while(L)
{
if(L->data==element)
return L;
L=L->next;
}
return NULL;
}
bool ListInsert(LinkList L,int i,ElemType element)
{
LinkList p=GetElem(L,i-1);
if(p==NULL)return false;
LinkList q;
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;
}
}
int main()
{
LinkList L;//LNode *L;
//List_head_Insert(L);
List_tail_Insert(L);
cout_List(L);
//cout<<GetElem(L,2)->data;
cout<<endl<<LocateElem(L,56)->data;
bool value=ListInsert(L,3,161);
if(value)cout<<"插入成功";
else cout<<"插入失败";
// cout<<endl<<value;
}