📄 circular_dlist.c
字号:
#include <stdio.h>#include <stdlib.h>#include "single_list.h"#include "circular_dlist.h"Node_dl* head;unsigned int size = 0;Node_dl *CreateNew_dl(int id,int m){ head = malloc(sizeof(Node_dl)); head->id = id; head->next = head; head->prev = head; printf("create head with id %d\n",id); size = 1; maxf = m; return head;}int Insert_dl (int id){ /*if((2 >> maxf) > size) return -1;*/ if(Find_dl(id)) return -1; Node_dl* new = malloc(sizeof(Node_dl)); Node_dl* tmp = head; while(tmp) { if(tmp->id > id) break; tmp = tmp->next; if(tmp == head) break; } Node_dl* prevp = tmp->prev; new->id = id; new->prev = prevp; new->next = tmp; prevp->next = new; tmp->prev = new;// printf("insert node with id %d. Prev = %d , next = %d ",id,prevp->id,tmp->id); size ++; /*Now Create the file list*/ new ->DocL = (struct Node_sl*)CreateNew(); if(new->next != head) { Node_sl *file = (new->next)->DocL; while(file->next){ file = file->next; if(file->id <= id) {/*BAD SLOWWW*/ Insert_sl(file->id,file->type,new->DocL); Delete_sl(file->id,(new->next)->DocL); } } } return 0;}int Delete_dl(int id){ Node_dl* tmp = Find_dl(id) , * prevp , *nextp; if(size == 0) return -1; else if(!tmp) return -1; if(tmp->next != head) { Node_sl *file = tmp->DocL; while(file->next){ file = file->next; if(file->id <= id) {/*BAD SLOWWW*/ Insert_sl(file->id,file->type,(tmp->next)->DocL); Delete_sl(file->id,tmp->DocL); } } } prevp = tmp->prev; nextp = tmp->next; if(tmp == head) { if(size == 1){ free(tmp); head = NULL; return 1; } else head = head->next; } prevp->next = tmp->next; nextp->prev = tmp->prev;// printf("Delete Node with id %d \n",tmp->id); free(tmp); return 1;}Node_dl *Find_dl(int id){ Node_dl* tmp = head; while(tmp) { if(tmp->id == id) {// printf("\nFound Node id %d",tmp->id); return tmp; } tmp = tmp->next; if(tmp == head) break; }// printf("NOT found Node id %d\n",id); return NULL;}void print_dl(void){ Node_dl* tmp = head; printf("\nListing Nodes...\n"); while(tmp) { printf("Node %d",tmp->id); print_sl((struct sNode*)tmp->DocL); tmp = tmp->next; printf("\n"); if(tmp == head) return; }} int Insert_File(int id, int type) { Node_dl* tmp = head; while(tmp) { if(tmp->id >= id) break; tmp = tmp->next; if(tmp == head) //here something strange happens nowhere to put file; return -1; } Insert_sl(id,type,(struct sNode*)tmp->DocL); return 1;}int Delete_File(int id) { Node_dl* tmp = head; while(tmp) { if(tmp->id >= id) break; tmp = tmp->next; if(tmp == head) //here something strange happens file has no place yet. return -1; } Delete_sl(id,(struct sNode*)tmp->DocL); return 1;}int Find_File(int id) { Node_dl* tmp = head; while(tmp) { if(tmp->id >= id) break; tmp = tmp->next; if(tmp == head) //here something strange happens file has no place yet. return -1; } printf("File with id: %d , is at Node: %d\n",id, tmp->id); return 1;}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -