声明:此为书中笔记,笔者只想把它贴出来,以后再慢慢整理。
2015-09-19
author:tianhangyu8886@gmail.com
Linklist Creatlist2(Linklist &L){
int x; //设置元素类型为整型
L=(Linklist)malloc(sizeof(LNode));
LNode *s,*r=L; //r为表尾指针
scanf("%d",&x); //输入结点的值
while(x!=9999){ //输入9999表示结束
s=(LNode*)malloc(sizeof(LNode)); //创建新建结点
s->data=x;
r->next=s;
r=s; //r指向新的表尾结点
scanf("%d",&x);
}
r->next=NULL; //尾结点指针置空
return L;
}
//按序号查找结点值
LNode *GetElem(Linklist L ,int i){
int j=1; //计算,初始化为1
LNode *p=L->next; //头结点指针域给p
if(i==0)
return L; //若等于0,则返回头结点
if(i<1)
return NULL; //若i无效,返回空
while(p&&j<i){ //从第一个结点开始查找第i个结点
p=p->next;
j++;
}
return p; //返回第i个结点的指针,如果i大于表长,p=NULL.
}
//{4}按值查找结点
LNode *LocateElem(Linklist L,ElemType e){ //本算法查找单链表L(带头结点)中数据域
//值等于e的结点指针,否则返回NULL
LNode *p=L->next;
while(p!=NULL&&p->data!=e) //从第1个结点开始查找data域为e的结点
p=p->next;
return p; //找到后返回该结点的指针
}
//{5}插入结点操作
//先检查插入位置的合法性,然后找到带插入位置的前驱结点,即第i-1个结点,再在其后插入新结点
p=GetElem(L,i-1);
s->next=p->next; //s的指针域指向p的后继结点
p->next=s; //再把p的指针域指向s