#ifndef _LIST_H
struct Node;
typedef struct Node *PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Position;
int IsEmpty(List l);
int Islast(Position p,List l);
Position Find(int x,List l);
void Delete(int x,List l);
Position FindPrevious(int x,List l);
void InsertAfter(int x,List l,Position p);
void InsertBefore(int x,List l,Position p);
List InsertHead(List l,int x);
void DeleteList(List l);
void PrintList(List l);
int Retrieve(Position p);
List MakeList();
Position FindEnd(List l)
void BuildList(List l,int x);
#endif
struct Node{
int n;
Position next;
}
void DeleteList MakeEmpty(List l){
List p;
while(l!=NULL){
p = l->next;
free(l);
l = p;
}
}
int IsEmpty(List l){
if(l->next == NULL)
return 1;
else return 0;
}
int Islast(Position p,List l){
return p->next == NULL;
}
Position Find(int x,List l){
List *p;
p = l;
while(p!=NULL){
if(p->n == x) break;
else p = p->next;
}
return p;
}
void Delete(int x,List l){
Position p,tmp;
p = FindPrevious(x,l);
if(!Islast(p)){
tmp = p->next;
p->next = tmp->next;
free(tmp);
}
}
Position FindPrevious(int x,List l){
Position p,q;
p = q = l;
while(p!= NULL){
if(p->n == x) break;
q = p;
p = p->next;
}
if(p!=NULL)
return q;
else return NULL;
}
void InsertAfter(int x,List l,Position p);
{
Position tmp;
tmp = (List)malloc(sizeof(struct Node));
if(tmp == NULL){
printf("Out of Space!\n");
return 1;
}
tmp->n = x;
tmp->next = p->next;
p->next = tmp;
}
void InsertBefore(int x,List l,Position p){
Position q,tmp;
q = FindPrevious(p->n,l);
tmp = (List)malloc(sizeof(struct Node));
if(tmp == NULL){
printf("Out of Space!\n");
return 1;
}
tmp->n = x;
tmp->next = q->next;
q->next = tmp;
}
List InsertHead(List l,int x){
Position p;
p = (List)malloc(sizeof(struct Node));
p->n = x;
p->next = l->next;
l = p;
return l;
}
void PrintList(List l){
Position p;
p = l;
while(p!=NULL){
printf("%d",p->n);
p = p->next;
}
}
int Retrieve(Position p){
return p->n;
}
List MakeList(){
List l;
l = NULL;
return l;
}
void BuildList(List l,int x){
Position p;
p = FindEnd(al);
if(p == NULL){
p = (List)malloc(sizeof(struct Node));
p->n = x;
p->next = NULL;
l = p;
}
else InsertAfter(x,l,p);
}
Position FindEnd(List l){
Position p;
if(l == NULL)
return l;
p = l;
while(p->next != NULL){
p = p->next;
}
return p;
}
链表ADT
最新推荐文章于 2023-02-21 20:02:02 发布