⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 circular_dlist.c

📁 This is a binary search tree with void* pointer in data segment in order you to search store and del
💻 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 + -