单链表基本操作代码

#include 
#include 

typedef int ElemType;

typedef struct LNode{
	ElemType data;
	struct LNode *next;
}LNode,*LinkList;

 //头插法建立单链表
LinkList Link_HeadInsert(LinkList &L){  
	LNode *s;
	int x;
	L = (LinkList)malloc(sizeof(LNode)); 
	L->next =NULL; //结构体用".",结构体指针用"->"
	scanf("%d",&x);
	while(x != 9999){
		s = (LNode*)malloc(sizeof(LNode));
		s->data = x;
		s->next = L->next;
		L->next = s;
		scanf("%d",&x);
	}
	return L;
}

//尾插法建立单链表
LinkList List_TailInsert(LinkList &L){ 
	int x;
	L = (LinkList)malloc(sizeof(LNode));
	LNode *s,*r=L;
	scanf("%d",&x);
	while(x != 9999){
		s = (LNode*)malloc(sizeof(LNode));
		s->data = x;
		r->next = s;
		r=s;
		scanf("%d",&x);
	}
	r->next = NULL;
	return L;
}

//输出链表所有数据
void PrintList(LinkList L){
	LNode *p;
	p = L->next;
	while(p!=NULL){
		printf("%d\t",p->data);
		p = p->next;
	}
	printf("\n");
}


//按节点序号来查找节点值
LNode *GetElem(LinkList &L,int i){ //'*' 代表返回一个指针
	int j = 1;
	LNode *p = L->next;
	if(i==0)
		return L; //返回头结点
	if(i<1)
		return NULL;
	while(p&&jnext;
		j++;
	}
	return p;
}


//按值来查找表节点
LNode *LocateElem(LinkList &L ,ElemType e){
	LNode *p = L->next;
	while(p!=NULL&&p->data!=e)
		p = p->next;
	return p;
}


//插入节点
int LinkList_Insert(LinkList &L,int i,ElemType e){
	LNode *p,*s;
	s = (LinkList)malloc(sizeof(LNode));
	p = GetElem(L,i-1); //找到插入位置的前一个节点
	s->data = e;
	s->next = p->next;
	p->next =s;
	return 0;
}

//删除节点,不需要返回删除节点的值
int LinkList_Delete(LinkList &L,int i){
	LNode *p;
	p = GetElem(L,i-1);
	p->next = p->next->next;
	return 0;
}

//删除节点并且返回删除节点的值
int LinkList_Delete(LinkList &L,int i,ElemType &e){
	LNode *p,*q;
	p = GetElem(L,i-1);
	q = p->next;
	p->next = q->next;
	e= q->data;
	free(q);
	return 0;
}

//合并两个有顺序的单链表为一个单链表
void MergeList(LinkList &La,LinkList &Lb,LinkList &Lc){
	LNode *pa,*pb,*pc;
	pa = La->next;pb=Lb->next;
	Lc=pc=La;
	while(pa&&pb){
		if(pa->data > pb->data){
			pc->next = pa;
			pc = pa;
			pa=pa->next;
		}
		else{
			pc->next = pb;
			pc=pb;
			pb=pb->next; 
		}
	}
	pc->next = pa?pa:pb;
	free(Lb);
}

void main(){
	LinkList L;
	List_TailInsert(L);
	PrintList(L);
	LinkList_Delete(L,1);
	PrintList(L);
}

 

你可能感兴趣的:(数据结构)