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