typedef struct _NODE
1 #include"LINK_DLIST.h" 2 #include<stdlib.h> 3 #include<stdio.h> 4 bool init_link_dlist(NODE *phead) 5 { 6 if(phead == NULL) 7 { 8 return false; 9 } 10 phead->data = -1; 11 phead->next = NULL; 12 phead->prio = NULL; 13 return true; 14 } 15 16 NODE *alloc(int e) 17 { 18 NODE *tmp = (NODE *)malloc(sizeof(NODE)*1); 19 if(tmp == NULL) 20 { 21 return NULL; 22 } 23 tmp->data = e; 24 tmp->next = NULL; 25 tmp->prio = NULL; 26 return tmp; 27 } 28 29 bool insert_head(NODE *phead,int e) 30 { 31 if(phead == NULL) 32 { 33 return false; 34 } 35 NODE *tmp = alloc(e); 36 if(is_empty(phead)) 37 { 38 39 phead->next = tmp; 40 tmp->prio = phead; 41 return true; 42 43 } 44 45 tmp->next = phead->next; 46 phead->next->prio = tmp; 47 tmp->prio = phead; 48 phead->next = tmp; 49 return true; 50 } 51 52 bool show(NODE *phead) 53 { 54 if(phead == NULL) 55 { 56 return false; 57 } 58 NODE * p= phead->next ; 59 while(p!= NULL) 60 { 61 printf("%d ",p->data); 62 p = p->next ; 63 64 } 65 printf("\n"); 66 return true; 67 } 68 69 bool is_empty(NODE *phead) 70 { 71 if(phead == NULL) 72 { 73 return false; 74 } 75 return phead->next == NULL; 76 } 77 78 NODE *get_last(NODE *phead) 79 { 80 if(phead == NULL) 81 { 82 return NULL; 83 } 84 if(is_empty(phead)) 85 { 86 return phead; 87 } 88 NODE *p = phead; 89 while(p->next != NULL) 90 { 91 p = p->next ; 92 } 93 return p; 94 } 95 bool insert_tail(NODE *phead,int e) 96 { 97 if(phead == NULL) 98 { 99 return false; 100 } 101 NODE *tmp = alloc(e); 102 NODE *p = get_last(phead); 103 p->next = tmp; 104 tmp->prio = p; 105 106 return true; 107 } 108 109 bool delete_head(NODE *phead,int *e) 110 { 111 if(phead == NULL) 112 { 113 return false; 114 } 115 NODE *tmp = alloc(*e); 116 if(phead->next->next == NULL) 117 { 118 free(phead->next); 119 phead->next = NULL; 120 return true; 121 } 122 tmp = phead->next ; 123 *e = tmp->data ; 124 phead->next = tmp->next ; 125 tmp->next->prio = phead; 126 127 return true; 128 129 } 130 bool delete_tail(NODE *phead,int *e) 131 { 132 if(phead == NULL) 133 { 134 return false; 135 } 136 NODE *tmp = alloc(*e); 137 tmp = get_last(phead); 138 *e = tmp->data ; 139 tmp->prio->next = NULL; 140 free(tmp); 141 return true; 142 143 } 144 NODE *get_addr_by_pos(NODE *phead, int pos) 145 { 146 if(phead == NULL) 147 { 148 return NULL; 149 } 150 if(pos<=0 && pos > get_len(phead)) 151 { 152 return NULL; 153 } 154 NODE *p = phead ; 155 while(pos>0) 156 { 157 p=p->next ; 158 pos--; 159 160 } 161 return p; 162 } 163 bool insert(NODE*phead,int pos,int e) 164 { 165 if(phead == NULL) 166 { 167 return false; 168 } 169 if(pos<0 && pos>get_len(phead)) 170 { 171 return false; 172 } 173 NODE *tmp = alloc(e); 174 NODE *s = get_addr_by_pos(phead,pos); 175 s->prio ->next = tmp; 176 tmp->next = s; 177 tmp->prio = s->prio ; 178 s->prio = tmp; 179 return true; 180 181 } 182 bool del(NODE *phead,int pos) 183 { 184 if(phead == NULL) 185 { 186 return false; 187 } 188 if(pos<0 && pos >get_len(phead)) 189 { 190 return false; 191 } 192 193 NODE *s = get_addr_by_pos(phead,pos); 194 s->prio->next = s->next ; 195 s->next ->prio = s->prio ; 196 free(s); 197 return true; 198 199 } 200 int get_len(NODE *phead) 201 { 202 NODE *p = phead->next; 203 int count= 0; 204 while(p!=NULL) 205 { 206 p = p->next ; 207 count ++; 208 } 209 return count; 210 }
{
int data;
struct _NODE *next;
struct _NODE *prio;
}NODE;
bool init_link_dlist(NODE *phead);
bool insert_head(NODE *phead,int e);
bool show(NODE *phead);
bool is_empty(NODE *phead);
NODE *get_last(NODE *phead);
bool insert_tail(NODE *phead,int e);
bool delete_head(NODE *phead,int *e);
bool delete_tail(NODE *phead,int *e);
bool insert(NODE*phead,int pos,int e);
bool del(NODE *phead,int pos);
int get_len(NODE *phead);
方法的具体实现