单链表(有头结点)
#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(){}