링크 생 성, 삭제, 기본 작업 삽입

3343 단어
데이터 구조 에서 링크 는 가장 기본 적 인 것 이 고 대부분 IT 회사 의 면접 필기시험 에서 가장 많이 고찰 한 것 이다.링크 를 탄탄 하 게 처리 하 는 기반 을 가지 면 앞으로 더욱 복잡 한 데이터 구조 유형 을 배 우 는 데 도움 이 되 고 필요 하 다.그래서 여가 시간 에 링크 에 대한 기본 적 인 조작 을 다시 썼 고 자 료 를 참고 하여 코드 를 공유 하여 초보 자 에 게 도움 이 되 기 를 바 랍 니 다.
처음에 체인 테이블 의 구축 에 대해 이렇게 썼 고 기본적으로 두 번 의 malloc 함수 호출 을 사용 했다.코드 는 대체로 다음 과 같다.
//     n    
node *create(int n)
{
	node *head,*precious,*current;
	int cnt;
	int label = 1;
	for(cnt = 0;cnt < n;cnt++)
	{
		if(label == 1)
		{
			precious = (node *)malloc(sizeof(node));
			printf("Input the information just like:name ID gender age 
"); scanf("%s%s%s%d",precious->name,precious->ID,precious->s,&precious->age); precious->link = NULL; head = precious; label = 0; } else { current = (node*)malloc(sizeof(node)); printf("Input the information just like:name ID gender age
"); scanf("%s%s%s%d",current->name,current->ID,current->s,¤t->age); // current->link = NULL; precious->link = current; precious = current; } } precious->link = NULL; return head; }

나중에 자 료 를 보고 많이 간소화 했다. 다음 과 같은 문법 은 제창 할 만하 다.
//    
node *CreatLink(int n)
{
	node *head,*p,*q;

	for(int i=1; i<n+1; i++)
	{
		p = (node*)malloc(sizeof(node));
		printf("input a number:");
		scanf("%d",&p->data);

		if(i == 1) head = p;
		else q->next = p;

		q = p;
		p->next = NULL; 
	}


	return head;
}

그 다음 에 언급 하고 자 하 는 것 은 삽입 과 삭제 작업 입 니 다. 두 가지 주의해 야 할 것 이 있 습 니 다. 먼저 삽입 이 든 삭제 든 첫 번 째 로 해 야 할 일 은 조작 할 위 치 를 찾 는 것 입 니 다.그 다음 에 작업 의 위 치 를 세 가지 상황 으로 나 누 어야 한다. 즉, 머리 결점, 중간 결점, 꼬리 결점 이다.
아래 코드 는 일부 자료 (예 를 들 어 프로그래머 면접 보전, 담 호 강의 책) 를 참고 했다.
삽입점
node *Insert(node *head,int num)
{
	node *p,*q,*s;
	s = (node*)malloc(sizeof(node));
	printf("input a number:");
	scanf("%d",&s->data);
	p = head;
	//           ,          
	while(p->data < s->data && p->next != NULL)
	{
		q = p; p = p->next;
	}

	if(p == head) {head = s; p = s->next;}
	else if(p->next == NULL) { p->next = s; s->next = NULL; }
	else { q->next = s; s->next = p; }

	return head;
}

결점 삭제: (끝 점 과 중간 결점 절 차 를 하나 로 합 칠 수 있 습 니 다)
node *Delete(node *head,int num)
{
	node *p,*q;
	p = head;
	//      
	while(p->data != num && p->next != NULL)
	{
		q = p; p = p->next;
	}

	if(num == p->data)
	{
		if(p == head) { head = p->next; free(p); }
		else { q->next = p->next; free(p); }
	}
	else
		printf("%d could not been found",num);

	return head;
}

마지막 으로 간단하게 체인 테이블 정렬, 체인 테이블 정렬 을 소개 합 니 다. 정렬 에 중점 을 두 고 지침 에 대한 조작 이 적 습 니 다.정렬 에 사용 되 는 것 은 거품, 직접, 선택 등 몇 가지 전형 적 인 정렬 알고리즘 일 뿐이다.제 개인 적 인 경험 을 통 해 순 위 는 면접 필기시험 에 도 중점 이 고 거의 물 어 볼 수 있 습 니 다.
다음은 거품 법 으로 쓴 링크 정렬 입 니 다.
node *Sort(node* head,int length)
{
	node *p;
	

	for(int i = 1; i < length ; i++)
	{
		p = head;
		for(int j = 0; j < length - i ; j++)
		{
			if(p->data > p->next->data)
			{
				int tmp = p->data;
				p->data = p->next->data;
				p->next->data = tmp;
			}
			p = p->next;
		}
	}

		return head;
}

좋은 웹페이지 즐겨찾기