单链表
- 定义
typedef struct LNode{
int data;
struct LNode *next;
}SqList;
- 初始化
void InitList(SqList *&L){
L=(SqList *)malloc(sizeof(SqList));
}
- 头插法(倒序)
void Create(SqList *&L,int a[],int n){
SqList *s;
L->next=NULL;
int i=0;
while(i<n){
s=(SqList *)malloc(sizeof(SqList));
s->data=a[i];
s->next=L->next;
L->next=s;
i++;
}
}
- 尾插法(顺序)
void Create(SqList *&L,int a[],int n){
SqList *s,*r;
r=L;
while(i<n){
s->data=a[i];
r->next=s;
r=s;
i++;
}
r->next=NULL;
}
- 增加元素
bool insert(SqList *&L,int i){
int j=0;
SqList *p=L,*q;
q=(SqList *)malloc(sizeof(SqList));
while(j<i-1&&p!=NULL){
p=p->next;
j++;
}
if(p==NULL) return false;
q->data=i;
q->next=p->next;
p->next=q;
return true;
}
- 删除元素
bool delete(SqList *&L,int i){
int j=0;
SqList *p=L,*q;
while(j<i-1&&p!=NULL){
p=p->next;
j++;
}
if(p==NULL){
return false;
}else{
q=p->next;
if(q==NULL){
return false;
}
p->next=q->next;
free(p);
return true;
}
}
- 输出打印
void print(SqList *&L){
SqList *p=L->next;
while(p!=NULL){
cout<<p->data<<" ";
p=p->next;
}
}
`
双链表
- 定义
typedef struct LNode{
int data;
struct LNode *prior,*next;
}DList;
- 初始化
void InitList(DList *&L){
L=(DList *)malloc(sizeof(DList));
}
- 头插法
void Create(DList *&L,int a[],int n){
DList *s;
int i=0;
L->prior=L->next=NULL;
while(i<n){
s->data=a[i];
s->next=L->next;
L->next=s;
if(L->next!=NULL){
L->next->prior=s;
}
s->prior=L;
i++;
}
}
- 尾插法
void Create(DList *&L,int a[],int n){
DList *s,*r;
int i=0;
r=L;
while(i<n){
s=(DList *)malloc(sizeof(DList));
s->data=a[i];
r->next=s;
s->prior=r;
r=s;
i++;
}
r->next=NULL;
}
- 删除元素
bool delete(SqList *&L,int i){
int j=0;
SqList *p=L,*q;
while(j<i-1&&p!=NULL){
p=p->next;
j++;
}
if(p==NULL){
return false;
}else{
q=p->next;
if(q==NULL){
return false;
}
p->next=q->next;
q->next->prior=p;
return true;
}
}
- 添加元素
bool insert(SqList *&L,int i){
int j=0;
SqList *p=L,*q;
q=(SqList *)malloc(sizeof(SqList));
while(j<i-1&&p!=NULL){
p=p->next;
j++;
}
if(p==NULL) return false;
q->data=i;
q->next=p->next;
p->next->prior=q;
p->next=q;
q->prior=p;
return true;
}