2.3 线性表的链式表示
2.3.1 单链表的定义
typedef struct LNode{
int data;
struct LNode *next;
}LNode, *LinkList;
2.3.2 单链表上基本操作的实现
1. 采用头插法创立单链表
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_Head(LinkList &L){
LNode *s;
int x;
L=(LinkList) malloc(sizeof (LNode));
scanf("%d", &x);
s=(LinkList) malloc(sizeof (LNode));
s->data = x;
L=s;
s->next = NULL;
scanf("%d", &x);
while (x != 9999){
s=(LinkList) malloc(sizeof (LNode));
s->data = x;
s->next=L->next;
L=s;
scanf("%d", &x);
}
return L;
}
2. 采用尾插法创建单链表
LinkList List_TailInsert(LinkList &L){
int x;
L=(LinkList) malloc(sizeof (LNode));
LNode *s, *r;
r = L;
scanf("%d", &x);
while (x!=9999){
s=(LinkList) malloc(sizeof (LNode));
s->data = x;
r->next = s;
r = s;
}
r->next = NULL;
}
3. 按序号查找结点值
LNode *GetElem(LinkList L, int i){
LNode *p = L->next;
int j = 1;
while (j < i && p){
p=p->next;
j++;
}
return p;
}
4. 按值查找表结点
LNode *LocateElem(LinkList L, int e){
LNode *p = L->next;
while (p!=NULL&&p->data!=e){
p=p->next;
}
return p;
}