链表ADT

#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;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值