一 带头结点的构建和插入
#include<stdio.h>
#include<stdlib.h>
struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
bool InitList(LinkList &L){
L=(LNode *)malloc(sizeof(LNode));
if(L==NULL){
return false;
}
L->next==NULL;
return true;
}
bool ListInsert(LinkList&L,int i,int e){
if(i<1){
return false;
}
LNode *p;
int j=0;
P=L;
while(p!=NULL&&j<i-1){
p=p->next;
j++;
}
if(p==NULL){
return false;
}
LNode *s=(LNode *)malloc(sizeof(LNode));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
int main(){
LinkList L;
InitList(L);
}
二 指定结点的后插操作
//指定结点的后插操作
bool InsertNextNode(LNode *p,int e){
if(p==NULL){
return false;
}
LNode *s=(LNode *malloc(sizeof(LNode)));
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
三 指定结点的前插操作
//指定结点的前插操作
bool InsertPriorNode(LNode *p,int e){
if(p==NULL){
return false;
}
LNode *s=(LNode *)malloc(sizeof(LNode));
s->next=p->next;
p->next=s;
s->data=p->data;
p->data=e;
return true;
}
示意图:
四 按位序删除(带头结点)
//按位序删除(带头结点)
bool ListDelete(LinkList &L,int i,int &e){
if(i<1){
return false;
}
LNode *p;
int j=0;
p=L;
while(p!=NULL&&j<i-1){
p=p->next;
j++;
}
if(p==NULL){
return false;
}
//i结点之后无结点
if(p->next==NULL){
return false;
}
LNode *q=p->next;
e=q->data;
p->next=q->next;
free(q);
return true;
}
五 删除指定结点
//删除指定结点
bool DeleteNode(LNode *p){
if(p==NULL){
return false;
}
LNode *q=p->next;
p->data=p->next->data;
p->next=q->next;
free(p);
return true;
}
示意图:
六 查找
//按位查找
LNode * GetElem(LinkList L,int i){
if(i<0){
return NULL;
}
LNode *p;
int j=0;
p=L;
while(p!=NULL&&j<i){
p=p->next;
j++;
}
return p;
}
//按值查找
LNode * LocateElem(LinkList L,int e){
LNode *p=L->next;
while(p!=NULL&&p->data!=e){
p=p->next;
}
return p;
}
七 求表的长度
//求表的长度
int length(LinkList L){
LNode *p=L;
int len=0;
while(p!=NULL){
p=p->next;
len++;
}
return len;
}
八 头插法和尾插法建立链表
//头插法建立单链表
LinkList List_HeadInsert(LinkList &L){
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
LNode *s;
int x;
scanf("%d",&x);
while(x!=9999){
s=(LNode *)malloc(sizeof(LNode));
s->data=x;
s->next=L->next;
L->next=s;
scanf("%d",&x);
}
return L;
}
//尾插法建立单链表
LinkList List_TailInsert(LinkList &L){
L=(LinkList)malloc(sizeof(LNode));
LNode *s,*r=L; //r为表尾指针
int x;
scanf("%d",&x);
while(x!=9999){
s=(LNode *)malloc(sizeof(LNode));
s->data=x;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=NULL;
return L;
}