单链表
#include <stdlib.h>
#include <iostream>
#include <stdio.h>
typedef struct LNode{int data;struct LNode *next;
}LNode,*LinkList;
void PrintList(LNode *p)
{LNode *temp;temp = p->next;printf("链表的顺序:");while(temp!=NULL){printf("%d ",temp->data);temp = temp->next;}printf("\n");
}
LinkList HeadInsert(LinkList &L){LNode *s;int x;L = (LinkList)malloc(sizeof(LNode));L->next=NULL;printf("请输入数字:");scanf("%d",&x);while(x!=000){s = (LNode*)malloc(sizeof(LNode));s->data = x;s->next = L->next;L->next = s;printf("请输入数字:");scanf("%d",&x);}return L;
}
LinkList TailInsert(LinkList &L){int x;L = (LinkList)malloc(sizeof(LNode));LNode *s,*r=L;printf("请输入数字:");scanf("%d",&x);while(x!=000){s = (LNode*)malloc(sizeof(LNode));s->data = x;r->next = s;r = s;printf("请输入数字:");scanf("%d",&x);}r->next=NULL;return L;
}
LNode *GetElem(LinkList L){int i;printf("请输入要查找的节点:"); scanf("%d",&i);if(i<1) return NULL;int j=1;LNode *p = L->next;while(p!=NULL&&j<i){p=p->next;j++;}return p;
}
int LocateElem(LinkList &L){int x;int i=0;printf("请输入你要查询的数字:");scanf("%d",&x);LNode *p = L->next;while(p!=NULL&&p->data!=x){p = p->next;i++;}return i+1;
}
LinkList ListInsert(LinkList L,int i,int n)
{if(i<1) return L;LNode *p;int j=0;p=L->next;while(p!=NULL&&j<i-2){p=p->next;j++;}if(p==NULL) return L;LNode *s = (LNode*)malloc(sizeof(LNode));s->data = n;s->next = p->next;p->next = s;printf("success\n"); return L;
}
LinkList ListNextInsert(LinkList &L,int i,int n){if(i<1) return L;LNode *p;int j=0;p=L->next;while(p!=NULL&&j<i-1){p=p->next;j++;}if(L==NULL) return L;LNode *s = (LNode*)malloc(sizeof(LNode));if(s==NULL) return L;s->data= n;s->next = p->next;p->next = s;printf("success\n"); return L;
} int main(){LinkList L;HeadInsert(L);PrintList(L);TailInsert(L);PrintList(L);LNode *p;p = GetElem(L);printf("查找出来值为:%d\n",p->data);int i;i = LocateElem(L);printf("找出位置:%d\n",i);printf("插入(L,2,99)");ListInsert(L,2,99);PrintList(L); printf("插入(L,3,99)");ListNextInsert(L,3,100);PrintList(L);return 0;
}
双链表
#include <stdlib.h>
#include <iostream>
#include <stdio.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->prior = NULL;L->next = NULL;return true;
}
bool Empty(DLinkList L){if(L->next==NULL){return true;}else{return false;}
}
bool InserNextDNode(DNode *p,DNode *s){if(p==NULL || s==NULL){return false;}s->next = p->next;if(p->next!=NULL){p->next->prior = s;}s->prior = p;p->next = s;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;}
void DestoryList(DLinkList &L){while(L->next!=NULL){DeleteNextDNode(L);} free(L);L=NULL;
}
循环单链表
#include <stdlib.h>
#include <iostream>
#include <stdio.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;
}
bool Empty(LinkList L){if(L->next==L) return true;else return false;
}
bool isTail(LinkList L,LNode *p){if(p->next == L) return true;else return false;
}
循环双链表
#include <stdlib.h>
#include <iostream>
#include <stdio.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->prior = L;L->next = L;return true;
}
bool Empty(DLinkList L){if(L->next==L) return true;else return false;
}
bool isTail(DLinkList &L,DNode *p){if(p->next==L) return true;else return false;
}