#數據結構#單鏈表

#include <stdio.h>
/*
單鏈表 
*/

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

//頭插法建表
//插在鏈表表頭上,鏈表順序反於邏輯順序
void CreateList_1(LinkList *&L,ElemType a[],int n){
	LinkList *s;
	int i;
	L=(LinkList *)malloc(sizeof(LinkList));
	L->next=NULL;//創建頭結點,其next置爲NULL
	for(i=0;i<n;i++){
		s=(LinkList *)malloc(sizeof(LinkList));
		s->data=a[i];
		s->next=L->next;
		L->next=s;
	} 
}
//尾插法建表
void CreateList_2(LinkList *&L,ElemType a[],int n){
	LinkList *s,*r;
	int i;
	L=(LinkList *)malloc(sizeof(LinkList));
	r=L;
	for(int i=0;i<n;i++){
		s=(LinkList *)malloc(sizeof(LinkList));
		s->data=a[i];
		r->next=s;
		r=s;
	}
	r->next=NULL;
}

//初始化單鏈表
void InitList(LinkList *&L){
	L=(LinkList *)malloc(sizeof(LinkList));
	L->next=NULL;
} 
//銷燬單鏈表
void DestroyList(LinkList *&L){
	LinkList *pre=L;
	LinkList *p=L->next;
	while(p!=NULL){
		free(pre);
		pre=p;
		p=pre->next;//p,pre同步後移 
	}
	free(pre);//循環結束時,p爲NULL,pre指向尾結點,釋放它; 
}
//判斷空表
bool ListEmpty(LinkList *L){
	return(L->next=NULL);
} 
//單鏈表長度
int Listlength(LinkList *L){
	int len=0;
	LinkList *p=L;
	while(p->next!=NULL){
		len++;
		p=p->next;
	}
	return len;
} 
//輸出線性表
void DispList(LinkList *L){
	LinkList *p=L->next;
	while(p!=NULL){
		printf("%d",p->data);
		p=p->next;
	}
	printf("\n");
} 
//單鏈表中 位置爲i的數據元素
bool GetElem(LinkList *L,int i,ElemType &e){
	LinkList *p=L;
	int j=0;
	while(j<i&&p!=NULL){
		j++;
		p=p->next;
	}
	if(p==NULL)
		return false;
	else{
		e=p->data;
		return true;
	}
} 
//按元素值查找
int LocateElem(LinkList *L,ElemType e){
	int i=1;
	LinkList *p=L->next;
	while(p!=NULL&&p->data!=e){
		p=p->next;
		i++;
	}
	if(p==NULL){
		return(0);
	else{
		return(i);
	}
	}
} 
//插入元素
bool Listinsert(LinkList *&L,int i,ElemType e){
	int j=0;
	LinkList *p=L;
	LinkList *s;
	while(j<i&&p!=NULL){
		j++;
		p=p->next;
	}
	if(p==NULL) return false;
	else{
		s=(linkList *)malloc(sizeof(LinkList));
		s.data=e;
		s->next=p->next;
		p->next=s;
		return true;
	}
	
} 
//刪除數據元素
bool ListDelete(Linklist *&L,int i,ElemType &e){
	int j=0;
	LinkList *p=L;
	LinkList *s;
	while(j<i&&p!=NULL){
		j++;
		p=p->next;
	}
	if(p==NULL) return false;
	else{
		s=p->next;
		if(q==NULL){
			return false;
		}
		p->next=s->next;
		free(s);
		return true;
	}
} 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章