[프로그래머 면접 보전] 데이터 구조 기초 2 단 사슬 표 순환 링크 의 작업 수립 | 삽입 삭제 | 인쇄 | 통합

#include<stdio.h>
#include<stdlib.h>
typedef struct dlinks
{
	int data;
	struct dlinks *pre;
	struct dlinks *next;
}dnode;

dnode *Create()
{
	dnode *head=(dnode*)malloc(sizeof(dnode));
	head->pre=NULL;
	dnode *s,*p=head;
	int data,cycle=1;
	while(cycle)
	{
		scanf("%d",&data);
		if(data)
		{
			s=(dnode*)malloc(sizeof(dnode));
			s->data=data;
			p->next=s;
			s->pre=p;
			s->next=NULL;
			p=p->next;
		}
		else
			cycle=0;
	}
	return head;	
}
void PRINT(dnode *link)
{
	dnode *p=link->next;
	while(p)
	{
		printf(" %d ",p->data);
		p=p->next;
	}
	printf("
"); } dnode *insert(dnode *link,int data,int n) { dnode *p=link; int i=0; while(i<n-1&&p!=NULL) { p=p->next; i++; } dnode *s=(dnode *)malloc(sizeof(dnode)); s->data=data; s->next=p->next; s->pre=p; p->next=s; return link; } dnode *deletenode(dnode *link,int n) { dnode *p=link; int i=0; while(i<n-1&&p!=NULL) { i++; p=p->next; } dnode *s=p->next; s->next->pre=p; p->next=s->next; free(s); return link; } dnode* MergeLinks(dnode *Linka,dnode *Linkb) { dnode *p=Linka->next; dnode *q=Linkb->next; dnode *Linkc=Linka; dnode *s=Linkc; s->pre=NULL; while(p&&q) { if(p->data<q->data) { s->next=p; p->pre=s; p=p->next; } else { s->next=q; q->pre=s; q=q->next; } s=s->next; } if(p) { s->next=p;p->pre=s; } if(q) { s->next=q;q->pre=s; } return Linkc; } int main() { // dnode *dlinklist; // dlinklist=Create(); // dlinklist=insert(dlinklist,9,3); // PRINT(dlinklist); // dlinklist=deletenode(dlinklist,5); // PRINT(dlinklist); dnode *link1=Create(); PRINT(link1); dnode *link2=Create(); PRINT(link2); dnode *link3=MergeLinks(link1,link2); PRINT(link3); return 0; }

좋은 웹페이지 즐겨찾기