以及基本功能的实现
list_ d_link_c.h
#ifndef _LIST_D_LINK_C_ #define _LIST_D_LINK_C_ #include<iostream> #include<assert.h> using namespace std; #define ElemType int typedef struct Node { ElemType data; struct Node *prio; struct Node *next; }Node,*PNode; typedef struct List { PNode first; PNode last; size_t size; }List; void Initlist(List *list); void push_back(List *list,ElemType x); void push_front(List *list,ElemType x); bool pop_back(List *list); bool pop_front(List *list); void show_seqlist(List *list); bool delete_val(List *list,ElemType key); int length(List *list); Node* find(List *list,ElemType key); void clear(List *list); void destroy(List *list); bool next(List *list,ElemType key); bool prio(List *list,ElemType key); bool resver(List *list); bool sort(List *list);//升序 bool modify(List *list,ElemType key); bool insert_val(List *list,ElemType key); #endif //_LIST_D_LINK_C_
#include"Seqlist_ d_link_c.h" void Initlist(List *list) { Node *s = (Node *)malloc(sizeof(Node)); assert(s != NULL); list->first = list->last = s; list->last->next = list->first; list->first->prio = list->last; list->size = 0; } void push_back(List *list,ElemType x) { Node *p = (Node *)malloc(sizeof(Node)); assert(p != NULL); p->data = x; p->next = list->first; list->first->prio = p; list->last->next = p; p->prio = list->last; list->last = p; list->size++; } void push_front(List *list,ElemType x) { Node *p = (Node *)malloc(sizeof(Node)); assert(p != NULL); p->data = x; if(list->size == 0) { list->last = p; } p->next = list->first->next; p->prio = list->first; list->first->next = p; list->size++; } bool pop_back(List *list) { Node *p = list->last; if(list->size == 0) { cout<<"list is NULL!"<<endl; return false; } if(list->size == 1) { list->last = list->first; } p->prio->next = list->first; list->first->prio = p->prio; free(p); list->last = list->first->prio; list->size--; return true; } bool pop_front(List *list) { Node *p = list->first->next; if(list->size ==0) { cout<<"the list is null!"<<endl; return false; } if(list->size == 1) { list->last = list->first; //list->last->next = list->first; } list->first->next = p->next; p->next->prio = list->first; free(p); list->size--; return true; } void show_seqlist(List *list) { Node *p = list->first->next; while(p!= list->first) { cout<<p->data<<"-->"; p = p->next; } cout<<"Nul"<<endl; } int length(List *list) { return list->size; } Node* find(List *list,ElemType key) { Node *p = list->first->next; while(p != list->first && p->data != key) p = p->next; if(p == list->first) return NULL; return p; } void clear(List *list) { Node *p = list->first->next; while(p != list->first) { list->first->next = p->next; free(p); p = list->first->next; } list->last = list->first; list->size = 0; } void destroy(List *list) { clear(list); free(list->first); list->first = list->last = NULL; } bool next(List *list,ElemType key) { Node *p = find(list,key); if(p == NULL) return false; else if(p == list->last) cout<<key<<"'s next is "<<list->first->next->data<<endl; else cout<<key<<"'s next is "<<p->next->data<<endl; return true; } bool prio(List *list,ElemType key) { Node *p = find(list,key); if(p == NULL) return false; else if(p == list->first->next) cout<<key<<"'s prio is "<<list->last->data<<endl; else cout<<key<<"'s prio is "<<p->prio->data<<endl; return true; } bool delete_val(List *list,ElemType key) { Node *p = find(list,key); if(p == NULL) return false; p->prio->next = p->next; p->next->prio = p->prio; if(p == list->last) list->last = p->prio; free(p); list->size--; return true; } bool resver(List *list) { Node *p = list->first->next; Node *q = p->next; p->next = list->first; list->first->prio = p; list->last = p; if(list->size <= 1) return false; while(q != list->first) { p = q; q = q->next; p->next = list->first->next; p->prio = list->first; list->first->next = p; p->next->prio = p; } return true; } bool sort(List *list)//升序 { Node *p = list->first->next; Node *q = p->next; p->next = list->first; list->first->prio = p; list->last = p; if(list->size <= 1) return false; list->size = 1;//设定初始长度为1 while(q != list->first) { p = q; q = q->next; insert_val(list,p->data); free(p); } return true; } bool modify(List *list,ElemType key) { Node *p = find(list,key); if(p == NULL) return false; cout<<"please input a new item:"; cin>>key; p->data = key; return true; } bool insert_val(List *list,ElemType key) { Node *p = find(list,key); if(p != NULL) return false; Node *q = (Node *)malloc(sizeof(Node)); q->data = key; p = list->first; while(p != list->last) { if(p->next->data > key) break; else p = p->next; } q->next = p->next; p->next->prio = q; q->prio = p; p->next = q; if(p == list->last) list->last = q; list->size++; return true; }
#include"Seqlist_ d_link_c.h" void main (void) { List mylist; Initlist(&mylist); int select = 1; int item; while(select) { cout<<"***********************************"<<endl; cout<<"* [1] push_back [2] push_front *"<<endl; cout<<"* [3] show_seqlist[0] quit_system *"<<endl; cout<<"* [4] pop_back [5] pop_front *"<<endl; cout<<"* [6] delete_val [7] insert_val *"<<endl; cout<<"* [08] modify [09]clear *"<<endl; cout<<"* [10] destroy [11]sort *"<<endl; cout<<"* [12] resver [13]length *"<<endl; cout<<"* [14] next [15]prio *"<<endl; cout<<"***********************************"<<endl; cout<<"请选择:"; cin>>select; switch(select) { case 1: cout<<"请输入要插入的数据(-1结束):>"; while(cin>>item,item!=-1) { push_back(&mylist,item); } break; case 2: cout<<"请输入要插入的数据(-1结束):>"; while(cin>>item,item!=-1) { push_front(&mylist,item); } break; case 3: show_seqlist(&mylist); break; case 4: pop_back(&mylist); break; case 5: pop_front(&mylist); break; case 6: cout<<"please input a value:"; cin>>item; delete_val(&mylist,item); break; case 7: cout<<"please input a value:"; cin>>item; insert_val(&mylist,item); break; case 8: cout<<"please input a value:"; cin>>item; modify(&mylist,item); break; case 9: clear(&mylist); break; case 10: destroy(&mylist); select = 0; break; case 11: sort(&mylist); break; case 12: resver(&mylist); break; case 13: cout<<"length is "<<length(&mylist)<<endl; break; case 14: cout<<"please input a value:"; cin>>item; next(&mylist,item); break; case 15: cout<<"please input a value:"; cin>>item; prio(&mylist,item); break; default: select = 0; break; } } }
原文地址:http://blog.csdn.net/chenmengmengx/article/details/45674765