目录
1.单链表的定义:
单链表基本操作的实现:
2.单链表的初始化(构造带头结点的空表)
2.将头结点的指针域置空
3.链表是否为空:
4.单链表的销毁:
5.单链表的清空:
6.求单链表的表长:
7. 取值 取单链表第i个元素:
8按值查找 根据指定数据查找指定数据所在位置序号(地址)
9.插入操作 在第i个结点前插入元素为e的新结点
10.删除结点:删除第i个元素
11.头插法 元素插入在链表头部
表示空表:
1.无头结点 : 头指针的指针域为空
2.有头结点: 头节点的指针域为空
typedef struct Lnode{
int data;
struct Lnode *next;
}Lnode,*LinkList;
首先定义struct Londe结构体,结构体内有data ,指向该结构体的指针next
再用typedef 将该结构体命名为Lnode类型,*LinkList为指向Lnode结构体的指针类型
定义链表(头指针):LinkList L;//L即为指针
定义结点指针:Lnode *p;
算法步骤:
1.生成新结点作头结点,用头指针L指向头结点
int InitList(LinkList &L)
{
L = new Lnode;
L->next=NULL;
return 1;
}
空表:链表中无元素,称为空链表(头指针和头结点仍然在)
int ListEmpty(LinkList L)
{
if(L->next)
cout<<"空表"<
算法思路:从头指针开始,依次释放所有结点
int DestoryList(LinkList &L)
{
Lnode *p;
while(L)
{
p=L;
L=L->next;
delete p;
}
return OK;
}
int ClearList(LinkList &L)
{
Lnode *p,* q;
p=L->next;
q=p->next;
delete p;
while(p!=NULL)
{
q=p;
q=q->next;
delete p;
}
L->next=NULL;
}
int ClearList(LinkList &L)
{
Lnode *p,*q;
p=L->next;
while(p)
{
q=p->next;
delete p;
q=p;
}
L->next=NULL;
return ok;
}
算法思路:从首元结点开始,依次计数所有结点
int ListLength(LinkList L)
{
Lnode *p;
p = L->next;
int i=0;
while(p)
{
p=p->next;
i++;
}
return i;
}
算法步骤:从第一个结点顺链扫描,用指针p指向当前扫描到的结点,p初值p=L->next
j作计数器,累计当前扫描过得结点数,j初值为1
当p指向扫描到的下一结点时,计数器j加1
当j==i时,p所指的结点就是要找的第i个结点
int GetElem(LinkList L,int i,int &e)
{
Lnode *p;
p=L->next;
int j=1;
while(p&&j>i){//向后扫描,直到P指向第i个元素或p为空
P=P->next;
++j;
}
if(!p||j>i) return ERROR;
e=p->data;
return OK;
}
int FindElem(LinkList L,int e){
Lnode *p;
p=L->next;
int i=1;
while(p&&p->data!=e)
{
p=p->next;
i++;
}
return i;
if(p) return i;
else return 0;
}
Lnode *LocateElem(LinkList L,int e){
//在线性表中查找值为e的数据元素
//找到,则返回L中值为e的数据元素地址,查找失败返回NULL
p=p->next;
while(p&&p->data!=e)
{
p=p->next;
}
return p;
}
算法步骤:1.首先找到ai-1的存储位置p
2生成一个数据域为e的新节点s
3插入新结点:1新结点的指针域指向结点ai
2.结点ai-1的指针域指向新结点
int InsertElem(LinkList &L,int i,int e)
{
Lnode *p,*s;
L = p;
int j=0;
while(p!=NULL&&jnext;
++j;
}
if(p==NULL||j>i-1) return ERROR;
s -> data = e ;
s -> next = p ->next;
p -> next = s;
return OK;
}
int DeleteElem(LinkList &L,int i,int &e){
Lnode *p,*q;
int j=0;
while(p->next&&jnext;
++j;
}
if(!(p->next)||j>i-1)
q=p->next;
p->next=q->next;
e=q->data;//将要删除元素用e保存,要用时可以用
delete q;
return OK;
}
int CreatList(LinkList &L,int n){
L = new Lnode;
L->next=NULL;//建立一个带头结点的单链表
for(int i=n;i>0;--i)
{
p = new Lnode;//生成新结点
cin>>p->data;//输入插入的元素
p->next=L->next;//将新结点插到表头
p=L->next;//在将新结点与头结点连接
}
}