单链表(有头结点)
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
bool InitList(LinkList &L){
L=(LNode *)malloc(sizeof(LNode));
if(L==NULL)
return false;
L->next=NULL;
return true;
}
LinkList List_TailInsert(LinkList &L){
L=(LinkList)malloc(sizeof(LNode));
LNode *s,*r=L;
int x;
scanf("%d",&x);
if(x!=999){
s=(LNode *)malloc(sizeof(LNode));
if(s=NULL)
return NULL;
s->data=x;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=NULL;
return L;
}
LinkList List_HeadInsert(LinkList &L){
L=(LinkList)malloc(sizeof(LNode));
L->next=NULL;
LNode *s;
int x;
scanf("%d",&x);
if(x!=999){
s=(LNode *)malloc(sizeof(LNode));
if(s=NULL)
return NULL;
s->data=x;
s->next=L->next;
L->next=s;
scanf("%d",&x);
}
return L;
}
bool InsertNextNode(LNode *p,int e) {
if(p==NULL)
return false;
LNode *s=(LNode *)malloc(sizeof(LNode));
if(s==NULL)
return false;
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
LNode * GetElem(LinkList L,int i){
if(i<0)
return NULL;
LNode *p;
int j=0;
p=L;
while(p!=NULL&&j<i){
p=p->next;
j++;
}
return p;
}
LNode * LocateElem(LinkList L,int e){
LNode *p=L->next;
while(p!=NULL&&p->data!=e){
p=p->next;
}
return p;
}
bool ListInsert(LinkList &L,int i,int e){
if(i<1)
return false;
LNode *p=GetElem(L,i-1);
return InsertNextNode(p,e);
}
bool InsertPriorNode(LNode *p,int e) {
if(p==NULL)
return false;
LNode *s=(LNode *)malloc(sizeof(LNode));
if(s==NULL)
return false;
s->next=p->next;
p->next=s;
s->data=p->data;
p->data=e;
return true;
}
bool ListDelete(LinkList &L,int i,int e){
if(i<1)
return false;
LNode *p;
int j=0;
p=L;
while(p!=NULL&&j<i-1){
p=p->next;
j++;
}
if(p==NULL)
return false;
if(p->next==NULL)
return false;
LNode *q=p->next;
e=q->data;
p->next=q->next;
free(q);
return true;
}
bool DeleteNode(LNode *p){
if(p=NULL)
return false;
LNode *q=p->next;
p->data=p->next->data;
p->next=q->next;
free(q);
return true;
}
int main(){
}
单链表(无头结点)
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
bool InitList(LinkList &L){
L=NULL;
return true;
}
LNode * GetElem(LinkList L,int i){
if(i<0)
return NULL;
LNode *p;
int j=1;
p=L;
while(p!=NULL&&j<i){
p=p->next;
j++;
}
return p;
}
LNode * LocateElem(LinkList L,int e){
LNode *p=L;
while(p!=NULL&&p->data!=e){
p=p->next;
}
return p;
}
bool InsertNextNode(LNode *p,int e) {
if(p==NULL)
return false;
LNode *s=(LNode *)malloc(sizeof(LNode));
if(s==NULL)
return false;
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
bool ListInsert(LinkList &L,int i,int e){
if(i<1)
return false;
if(i==1){
LNode *s=(LNode *)malloc(sizeof(LNode));
s->data=e;
s->next=L;
L=s;
return true;
}
LNode *p=GetElem(L,i-1);
return InsertNextNode(L,e);
}
bool InsertPriorNode(LNode *p,int e) {
if(p==NULL)
return false;
LNode *s=(LNode *)malloc(sizeof(LNode));
if(s==NULL)
return false;
s->next=p->next;
p->next=s;
s->data=p->data;
p->data=e;
return true;
}
bool DeleteNode(LNode *p){
if(p=NULL)
return false;
LNode *q=p->next;
p->data=p->next->data;
p->next=q->next;
free(q);
return true;
}
int main(){
}
双链表
#include<stdio.h>
#include<stdlib.h>
typedef struct DNode{
int data;
struct DNode *prior,*next;
}DNode,*DLinklist;
bool InitDLinkList(DLinklist &L){
L=(DNode *)malloc(sizeof(DNode));
if(L==NULL)
return false;
L->next=NULL;
L->prior=NULL;
return true;
}
bool InsertNextDNode(DNode *p,DNode *e){
if(p==NULL||e==NULL)
return false;
e->next=p->next;
if(p->next!=NULL)
p->next->prior=e;
e->prior=p;
p->next=e;
return true;
}
bool DeleteNextDNode(DNode *p){
if(p==NULL)
return false;
DNode *q=p->next;
if(q==NULL)
return false;
p->next=q->next;
if(q->next!=NULL)
q->next->prior=p;
free(q);
return true;
}
int main(){
}
循环单链表
#include<stdio.h>
#include<stdlib.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode,*LinkList;
bool InitList(LinkList &L){
L=(LNode *)malloc(sizeof(LNode));
if(L==NULL)
return false;
L->next=L;
return true;
}
LinkList List_TailInsert(LinkList &L){
L=(LinkList)malloc(sizeof(LNode));
LNode *s,*r=L;
int x;
scanf("%d",&x);
if(x!=999){
s=(LNode *)malloc(sizeof(LNode));
if(s=NULL)
return NULL;
s->data=x;
r->next=s;
r=s;
scanf("%d",&x);
}
r->next=NULL;
return L;
}
LinkList List_HeadInsert(LinkList &L){
L=(LinkList)malloc(sizeof(LNode));
L->next=L;
LNode *s;
int x;
scanf("%d",&x);
if(x!=999){
s=(LNode *)malloc(sizeof(LNode));
if(s=NULL)
return NULL;
s->data=x;
s->next=L->next;
L->next=s;
scanf("%d",&x);
}
return L;
}
bool InsertNextNode(LNode *p,int e) {
if(p==NULL)
return false;
LNode *s=(LNode *)malloc(sizeof(LNode));
if(s==NULL)
return false;
s->data=e;
s->next=p->next;
p->next=s;
return true;
}
LNode * GetElem(LinkList L,int i){
if(i<0)
return NULL;
LNode *p;
int j=0;
p=L;
while(p!=NULL&&j<i){
p=p->next;
j++;
}
return p;
}
LNode * LocateElem(LinkList L,int e){
LNode *p=L->next;
while(p!=NULL&&p->data!=e){
p=p->next;
}
return p;
}
bool ListInsert(LinkList &L,int i,int e){
if(i<1)
return false;
LNode *p=GetElem(L,i-1);
return InsertNextNode(p,e);
}
bool InsertPriorNode(LNode *p,int e) {
if(p==NULL)
return false;
LNode *s=(LNode *)malloc(sizeof(LNode));
if(s==NULL)
return false;
s->next=p->next;
p->next=s;
s->data=p->data;
p->data=e;
return true;
}
bool ListDelete(LinkList &L,int i,int e){
if(i<1)
return false;
LNode *p;
int j=0;
p=L;
while(p!=NULL&&j<i-1){
p=p->next;
j++;
}
if(p==NULL)
return false;
if(p->next==L)
return false;
LNode *q=p->next;
e=q->data;
p->next=q->next;
free(q);
return true;
}
bool DeleteNode(LNode *p){
if(p=NULL)
return false;
LNode *q=p->next;
p->data=p->next->data;
p->next=q->next;
free(q);
return true;
}
int main(){
}
循环双链表
#include<stdio.h>
#include<stdlib.h>
typedef struct DNode{
int data;
struct DNode *prior,*next;
}DNode,*DLinklist;
bool InitDLinkList(DLinklist &L){
L=(DNode *)malloc(sizeof(DNode));
if(L==NULL)
return false;
L->next=L;
L->prior=L;
return true;
}
bool InsertNextDNode(DNode *p,DNode *e){
if(p==NULL||e==NULL)
return false;
e->next=p->next;
p->next->prior=e;
e->prior=p;
p->next=e;
return true;
}
bool DeleteNextDNode(DLinklist &L,DNode *p){
if(p==NULL)
return false;
DNode *q=p->next;
if(q==L)
return false;
p->next=q->next;
q->next->prior=p;
free(q);
return true;
}
int main(){
}