데이터 구조 와 알고리즘 기초 - 더 블 링크

2871 단어 데이터 구조
단일 체인 테이블 은 한 노드 의 후계 만 직접 찾 을 수 있 고, 이중 체인 테이블 은 한 노드 의 전구 의 후계 도 직접 찾 을 수 있다.
#include 
#include 

typedef struct node
{
	int data;
	struct node *llink,*rlink;		//llink     rlink  
}*Linklist,Node;

//      
void IiniLlist(Linklist* head)
{
	(*head) = (Linklist)malloc(sizeof(Node));
	(*head)->llink = (*head)->rlink = NULL;
}

//     
Linklist CreatList(Linklist head)
{
	int number;
	Linklist tmp,k;
	k = head;
	printf("    :
"); while(scanf("%d",&number) != EOF) { tmp = (Linklist)malloc(sizeof(Node)); if(tmp) { tmp->data = number; tmp->rlink = k->rlink; if(k == head)tmp->llink = NULL; else tmp->llink = k; k->rlink = tmp; k = k->rlink; } } return head; } // pos data void InsertList(Linklist head,int pos,int data) { Linklist temp = head,digit; int flag=0; if(pos < 0 || pos > GetLength(head))return; // while(temp) { if(pos == flag && flag == GetLength(head)) { digit = (Linklist)malloc(sizeof(Node)); digit->data = data; digit->rlink = temp->rlink; temp->rlink = digit; digit->llink = temp; } else if(pos == flag) { digit = (Linklist)malloc(sizeof(Node)); digit->data = data; digit->rlink = temp->rlink; temp->rlink->llink = digit; // rlink NULL llink temp->rlink = digit; digit->llink = temp; } flag++; temp = temp->rlink; } } // pos void DeleteList(Linklist head,int pos) { Linklist temp = head; int flag=0; if(pos < 1 || pos > GetLength(head))exit(1); while(temp) { if(pos == flag) { temp->rlink->llink = temp->llink; temp->llink->rlink = temp->rlink; free(temp); break; } flag++; temp = temp->rlink; } } // int GetLength(Linklist head) { int result=0; Linklist temp = head->rlink; while(temp) { result++; temp = temp->rlink; } return result; } // void PrintList(Linklist head) { Linklist tmp = head->rlink; while(tmp) { printf("%d ",tmp->data); tmp = tmp->rlink; } printf("
"); } int main() { Linklist head; IiniLlist(&head); head = CreatList(head); InsertList(head,4,11); DeleteList(head,4); PrintList(head); return 0; }

새로운 기능 추가:
인접 원 소 를 교환 하지만 포인터 교환 을 통 해 진행 합 니 다.
void swap(Linklist head,int key)
{
	Linklist tmp,p1,p2;
	tmp = head->rlink;
	while(tmp)
	{
		if(tmp->rlink->data == key)break;
		tmp = tmp->rlink;
	}
	if(tmp->rlink->rlink == NULL)exit(1);
	
	p1 = tmp->rlink;			
	p2 = p1->rlink;
	p1->rlink = p2->rlink;
	if(p2->rlink != NULL)
		p2->rlink->llink = p1;		
	p1->llink = p2;
	p2->rlink = p1;
	tmp->rlink = p2;
	p2->llink = tmp;
	
}

좋은 웹페이지 즐겨찾기