데이터 구조 학습 (2) - 단일 체인 시트 의 조작 헤드 삽입 법 과 꼬리 삽입 법 으로 링크 를 만 듭 니 다.
머리 삽입 법 이란 노드 의 역순 방법 에 따라 점 을 링크 의 머리 에 점차적으로 삽입 하 는 것 이다.반면에 꼬리 삽입 법 은 노드 의 순서에 따라 노드 를 링크 의 꼬리 부분 에 점차적으로 삽입 하 는 것 이다.상대 적 으로 헤드 삽입 법 은 꼬리 삽입 법 알고리즘 보다 간단 하지만 마지막 에 발생 하 는 링크 는 역순 이다. 즉, 첫 번 째 입력 노드 는 실제 적 으로 링크 의 마지막 노드 이다.습관 을 들 이기 위해 서 는, 보통 꼬리 삽입 법 으로 링크 를 만든다.아래 의 코드 는 바로 머리 삽입 법 과 꼬리 삽입 법 을 실현 한 것 이다.코드 는 Linux 에서 디 버 깅 을 통 과 했 습 니 다.
#include <stdio.h>
#include <stdlib.h>
typedef struct link
{
	char data;
	struct link *next;
}linklist;
linklist *CreateList_Front();	//        
linklist *CreateList_End();		//        
void ShowLinklist(linklist *h); //      
int main(void)
{
	int choice;
	linklist *head;
	//head = (linklist*)malloc(sizeof(linklist));
	while(1)
	{
		printf("      
");
		printf("1.          
");
		printf("2.          
");
		printf("3.      
");
		printf("4.  
");
		printf("    :
");
		scanf("%d",&choice);
		switch(choice)
		{
		//   
		case 1:
			head = CreateList_Front();
			break;
		//   
		case 2:
			head = CreateList_End();
			break;
		//    
		case 3:
			ShowLinklist(head);
			break;
		//    
		case 4:
			return 0;
			break;
		default:
			break;
		}
	}
	return 1;
}
linklist *CreateList_Front()
{
	linklist *head, *p;
	char ch;
	head = NULL;
	printf("        (‘#’      ):
");
	ch = getchar();
	while(ch != '#')
	{
		p = (linklist*)malloc(sizeof(linklist));
		p->data = ch;
		p->next = head;
		head = p;
		ch = getchar();				//             p->next = head;head = p;
	}
	return head;
}
linklist *CreateList_End()
{
	linklist *head, *p, *e;
	char ch;
	head = NULL;
	e = NULL;
	printf("         ('#'      ):
");
	ch = getchar();
	while(ch != '#')
	{
		p = (linklist*)malloc(sizeof(linklist));
		p->data = ch;
		if(head == NULL)		//              
		{
			head = p;			
		}
		else
		{
			e->next = p;		//e             
		}
		e = p;
		ch = getchar();			
	}
	if(e != NULL)				//       ,             
	{
		e->next = NULL;
	}
	return head;				//           ,         ,                    。          e。
}
void ShowLinklist(linklist *h)
{
	linklist *p;
	p = h;
	while(p != NULL)
	{
		printf("%c ", p->data);
		p = p->next;
	}
	printf("
");
}상기 코드 를 통 해 알 수 있 듯 이 꼬리 삽입 법 은 확실히 머리 삽입 법 보다 복잡 하고 두 가지 판단 이 많다.그러나 이것 은 해결 할 수 있 습 니 다. 머리 노드 를 추가 하면 이 노드 는 데이터 도 메 인 을 저장 하지 않 고 다음 노드 를 가리 키 는 지침 도 메 인 만 저장 하면 됩 니 다.이렇게 하면 두 번 의 판단 을 면 할 수 있다.전체적으로 도 또렷 해 져 야 겠 다.다음은 머리 노드 를 추가 한 후 꼬리 삽입 법의 실현 코드 입 니 다.
#include <stdio.h>
#include <stdlib.h>
typedef struct list
{
	char data;
	struct list *next;
}linklist;
linklist *CreateList_End();		//       
void ShowLinklist(linklist *h);	//      
int main(void)
{
	linklist *head;
	printf("         (   )
");
	printf("         (‘#’      ):
");
	head = CreateList_End();		//    
	ShowLinklist(head);				//    
}
linklist *CreateList_End()
{
	linklist *head, *p, *e;
	char ch;
	head = (linklist*)malloc(sizeof(linklist));
	e = head;			// e     
	ch = getchar();
	while(ch != '#')
	{
		p = (linklist*)malloc(sizeof(linklist));
		p->data = ch; 
		e->next = p;		//         
		e = p;				//        
		ch = getchar();
	}	
	e->next = NULL;			//         
	return head;
}
void ShowLinklist(linklist *h)
{
	linklist *p;
	p = h->next;
	while(p != NULL)
	{
		printf("%c ", p->data);
		p = p->next;
	}
	printf("
");
}
머리 노드 하 나 를 추가 하면 코드 가 선명 해 져 야 하지 않 을까요?
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.