//双链表 typedef struct DLNode{ int data; struct DLNode *prior; struct DLNode *next; }DLNode; //初始化 void InitList(DLNode *&L){ L = (DLNode*)malloc(sizeof(DLNode)); L -> prior = NULL; L -> next = NULL; } //空表 bool ListEmpty(DLNode *L){ return (L -> prior ==NULL && L -> next == NULL); } //求表长 int ListLength(DLNode *L){ int n = 0; DLNode *r = L; while(r -> next != NULL){ n++; r = r -> next; } return n; } //求某个位置上的元素值 bool GetElem(DLNode *L, int i, int &e){ int n = 0; DLNode *r = L; if(ListEmpty(L)) cout<<"空表!"<<endl; if(i < 0) return false; while(r != NULL && n < i){ n++; r = r -> next; } if(r == NULL) return false; else{ e = r -> data; return true; } } //按元素值查找 int FindElem(DLNode *L,int e){ int n = 1; DLNode *r = L -> next; while(r != NULL && r -> data != e){ n++; r = r -> next; } if(r == NULL) return 0; else return n; } //插入数据元素 bool InsertList(DLNode *&L , int i,int e){ int n = 0; DLNode *r = L , *s; if(i < 0)return false; while(i < i - 1 && r != NULL){ n++; r = r -> next; } if(r == NULL)return false; else{ s = (DLNode*)malloc(sizeof(DLNode)); s -> data = e; s -> next = r -> next; r -> next -> prior = s; r -> next = s; s -> prior = r; return true; } } //删除数据元素 bool DeleteList(DLNode *&L ,int i,int &e){ int n = 0; DLNode * r = L , *q; if(i < 0) return false; while(r != NULL && n < i-1){ n++; r = r -> next; } if(r == NULL) return false; else{ q = r -> next; if(q == NULL) return fasle; e = q -> data; r -> next = q -> next; if(r -> next != NULL) q -> next -> prior = r; free(q); return true; } } //头插法 void CreateListF(DLNode *&L,int a[],int n){ DLNode * s; for(int i = 0;i < n ; i++){ s = (DLNode*)malloc(sizeof(DLNode)); s -> data = a[i]; s -> next = L -> next; if(L -> next != NULL) L -> next -> prior = s; L -> next = s; s -> prior = L; } } //尾插法 void CreateListR(DLNode *&L, int a[],int n){ DLNode *r = L ,*s; for(int i = 0 ; i < n ; i++){ s = (DLNode*)malloc(sizeof(DLNode)); s -> data = a[i]; r -> next = s; s -> prior = r; r = s; } r -> next = NULL; }
//双链表
typedef struct DLNode{int data;struct DLNode *prior;struct DLNode *next;}DLNode;
//初始化void InitList(DLNode *&L){L = (DLNode*)malloc(sizeof(DLNode));L -> prior = NULL;L -> next = NULL;}
//空表bool ListEmpty(DLNode *L){return (L -> prior ==NULL && L -> next == NULL);}
//求表长int ListLength(DLNode *L){int n = 0;DLNode *r = L;while(r -> next != NULL){n++;r = r -> next;}return n;}
//求某个位置上的元素值bool GetElem(DLNode *L, int i, int &e){int n = 0;DLNode *r = L;if(ListEmpty(L))cout<<"空表!"<<endl;if(i < 0)return false;while(r != NULL && n < i){n++;r = r -> next;}if(r == NULL)return false;else{e = r -> data;return true;}}
//按元素值查找int FindElem(DLNode *L,int e){int n = 1;DLNode *r = L -> next;while(r != NULL && r -> data != e){n++;r = r -> next;}if(r == NULL)return 0;elsereturn n;}
//插入数据元素bool InsertList(DLNode *&L , int i,int e){int n = 0;DLNode *r = L , *s;if(i < 0)return false;while(i < i - 1 && r != NULL){n++;r = r -> next;}if(r == NULL)return false;else{s = (DLNode*)malloc(sizeof(DLNode));s -> data = e;s -> next = r -> next;r -> next -> prior = s;r -> next = s;s -> prior = r;return true;}}
//删除数据元素bool DeleteList(DLNode *&L ,int i,int &e){int n = 0;DLNode * r = L , *q;if(i < 0)return false;while(r != NULL && n < i-1){n++;r = r -> next;}if(r == NULL)return false;else{q = r -> next;if(q == NULL)return fasle;e = q -> data;r -> next = q -> next;if(r -> next != NULL)q -> next -> prior = r;free(q);return true;}}
//头插法void CreateListF(DLNode *&L,int a[],int n){DLNode * s;for(int i = 0;i < n ; i++){s = (DLNode*)malloc(sizeof(DLNode));s -> data = a[i];s -> next = L -> next;if(L -> next != NULL)L -> next -> prior = s;L -> next = s;s -> prior = L;}}
//尾插法void CreateListR(DLNode *&L, int a[],int n){DLNode *r = L ,*s;for(int i = 0 ; i < n ; i++){s = (DLNode*)malloc(sizeof(DLNode));s -> data = a[i];r -> next = s;s -> prior = r;r = s;}r -> next = NULL;}