链表定义
#include<stdio.h>
typedef struct Node{
int data;
struct LNode *next;
}LNode *LinkList;
//头插法(带头结点)
LinkList list_HeadInsert(LinkList &L){
LNode *S;int x;
L = (LinkList)malloc(sizeof(LNode));
L->next = null;
scanf("%d",&x);
while(x!=9999){
S = (LinkList)malloc(sizeof(LNode));
S->data = x;
S->next = L->next;
L->next = S;
scanf("%d",&x);
}
return L;
}
//头插法(不带头结点)
LinkList list_HeadInsert2(LinkList &L){
LNode *S,int x;
L = (LinkList)malloc(sizeof(LNode));
L=null;
scanf("%d",&x)
while(x!=9999){
S = (LinkList)malloc(sizeof(LNode));
S->data = x;
S->next = L;
L = S;
scanf("%d",&x);
}
return L;
}
//尾插法建立单链表 //有头结点
LinkList list_TailInsert(LinkList &L){
LNode *S,int x;
LNode *r;
L = (LinkList)malloc(sizeof(LNode));
r=L;
scanf("%d",&x);
while(x!=9999){
S = (LinkList)malloc(sizeof(LNode));
S ->data = x;
r->next = S;
r = S;
scanf("%d",&x);
}
r->next = null;
return L;
}
//无头结点
LinkList list_TailInsert2(LinkList &L){
LNode *S,*r;
int x;
L = (LinkList)malloc(sizeof(LNode));
r=L;
scanf("%d",&x);
while(x!=9999){
S = (LinkList)malloc(sizeof(LNode));
S->data = x;
if(L==null){
L=S;
r=S;
continue;
}
r-next = S;
r = S;
scanf("%d",&x);
}
r->next = null;
return L;
}
//按照序号查找结点值
LNode *GetElem(LinkList L,int i){
LNode *p,*q;
p = L->next;
int j=1;
if(i==0) return L;
if(i<0) return null;
while(p!=null && j<i){
j++;
p = p->next;
}
return p;
}
//按值查找
LNode *LocateElem(LinkList L,int e){
LNode *p;
if(L==null) return null;
p=L->next;
while(p){
if(p->data == e)
return p;
p = p->next;
}
return p;
}
//在第i个位置上插入结点
void Insert(LinkList L,int e,int i){
LNode *p,*q;
int j;
p = L->next;
while(p && j<i-1){
j++;
p = p->next;
}
q = (LinkList)malloc(sizeof(LNode));
q->data = e;
q->next = p->next;
p->next = q;
}
//对某一节点进行前插操作。第i个位置前插x 结果同上
void preInsert(LinkList &L,int i,int x){
LNode *p,*q;
LNode *s;
p = GetElem(L,i);
s = (LinkList)malloc(sizeof(LNode));
s->data = p->data;
s->next = p->next;
p->next = s;
p->data = x;
}
//删除第i个结点
bool deleteI(LinkList &L,int i){
LNode *q,*p;
if(i<=0) return false;
p = GetElem(L,i-1);
if(p==null) return false;
q = p->next;
if(q=null) return false;
p->next = q->next;
free(q);
return true;
}
//删除指定结点*p
bool deleteP(LinkList &L,LNode *p){
LNode *q = p->next;
p->data = q->data;
p->next = q->next;
free(q);
}
//求表长
int Length(LinkList L){
LNode *p;
p = L->next;
int j=0;
while(p){
j++;
}
return j;
}