데이터 구조의 동적 단일 체인 표 코드 구현

체인 저장 구조: 빈 자리 가 있 는 곳 에 두 고 모든 요소 에 그의 다음 요소 의 위치 가 어디 에 있 는 지 알 게 할 뿐이다.     특징: 한 그룹의 저장 장치 로 선형 표 의 데이터 요 소 를 저장 합 니 다. 이 저장 장 치 는 연속 일 수도 있 고 연속 되 지 않 을 수도 있 습 니 다.후계 요 소 를 저장 하 는 저장 주 소 를 통 해 이 루어 집 니 다.     데이터 요소 정 보 를 저장 하 는 도 메 인 을 데이터 도 메 인 이 라 고 하고 직접 후계 문 직 을 저장 하 는 도 메 인 을 포인터 도 메 인 이 라 고 합 니 다.포인터 필드 에 저 장 된 정 보 를 포인터 나 체인 이 라 고 하 는데 이 두 부분 정 보 는 데이터 요소 의 저장 이미 지 를 구성 하여 결점 (Node) 이 라 고 합 니 다.           헤드 포인터: 링크 의 첫 번 째 노드 의 저장 위치      헤드 포인터 와 헤드 노드 의 공통점:               머리 지침: 머리 지침 은 체인 시계 가 첫 번 째 결점 을 가리 키 는 지침 을 말 하 는데 만약 에 체인 시계 에 머리 결점 이 있 으 면 머리 결점 을 가리 키 는 지침 이다.헤드 포인터 가 주소 지정 작용 을 하기 때문에 자주 헤드 포인터 에 링크 의 이름 을 붙인다.체인 시계 가 비어 있 든 없 든 헤드 포인터 가 비어 있 지 않 습 니 다.헤드 포인터 는 링크 의 필수 요소 이다.               두 결점: 두 결점 은 조작의 통일 과 편 의 를 위해 당신 을 설립 한 것 입 니 다. 첫 번 째 원소 의 결점 에 놓 기 전에 데이터 영역 은 일반적으로 의미 가 없습니다 (체인 테이블 의 길이 도 저장 할 수 있 습 니 다).어깨 에 점 이 생기다.첫 번 째 요소 노드 에 노드 를 삽입 하고 첫 번 째 노드 를 삭제 하면 그 조작 은 다른 가전제품 의 조작 과 통일 된다.두 결점 이 반드시 링크 의 필요 한 요소 가 아니다.
단일 체인 테이블 구조 와 순서 저장 구조의 장단 점:
     
저장 할당 방식: 순차 저장 구조 용 세그먼트
연속 적 인 저장 부 는 선형 표 의 데이터 요 소 를 순서대로 저장 합 니 다.
                             단일 체인 표 는 체인 식 저장 구 조 를 사용 하고 한 조 를 사용한다.
임의의 저장 장치 에 선형 표를 저장 하 는 요소
     
시간 성능: 찾기 - 순서 구조 O (1), 단일 체인 표 O (n)
                   
삽입 과 삭제 - 순서 저장 구 조 는 평균 이동 표 의 절반 의 요 소 를 필요 로 하고 시간 은 O (n) 이다.단일 체인 테이블 O (1)
                   
공간 성능 - 순서 저장 구조          저장 공간 을 미리 분배 하고 크게 나 누 며 낭비 하 며 작 게 나 누 면 넘 치기 쉽다.단일 체인 시트 는 저장 공간 을 분배 할 필요 가 없고 있 으 면 분배 할 수 있 으 며 요소 의 개 수 는 제한 을 받 지 않 습 니 다.
     선형 표 는 잦 은 검색 에 사용 되 며 삽입 과 삭제 작업 이 거의 없습니다.원소 개수 가 얼마나 되 는 지 알 때
     단일 체인 테이블 은 빈번 한 삽입 과 삭제 에 사 용 됩 니 다.얼마나 크 거나 많이 변 했 는 지 모 를 때.
#include<stdio.h>
#include<string.h>
#include<malloc.h>//            
typedef struct studentList//typedef       student      (struct      ,       )
{
	char name[20];//    
	int age;//    
	struct studentList *next;//        
}student;//student           ,                      

student *create()//student      ,            
{
	student *head,*previous,*current;//            ,head      ,previous     ,current           ,                       
	head=NULL;
	puts("let us create a student's list,please input first student's name:");
	while(1)
	{
		current=(student *)malloc(sizeof(student));//    
		if(head==NULL)//     
		{
			previous=current;
			head=current;l//        
		}
		else 
			previous->next=current;//                 
		current->next=NULL;//           NULL,        
		scanf("%s",current->name);//         
		puts("please input the student's age(0 to quit):");
		scanf("%d",¤t->age);//    
		if(current->age==0)//     0 ,    
			break;
		puts("please input the next student's name:");
		previous=current;//          
	}
	current->next=NULL;
	return head; //         
}

student *print(student *head)//    
{
	student *current;
	current=head;
	puts("Now the list is followed:");
	puts("name                age");
	while(current->next!=NULL)//        
	{
		printf("%-20s%d
",current->name,current->age); current=current->next;// } printf("%-20s%d
",current->name,current->age); return head; } student *add(student *head,student *end)// { student *current; current=head; while(current->next!=NULL)// current=current->next; current->next=end;// end->next=NULL;// NULL return head; } student *dele(student *head,int n)// n student { student *previous,*current; current=head; while(current->next!=NULL&¤t->age!=n)// n, { previous=current; current=current->next; } if(current->age==n)// n( ) { if(current==head)// , head=current->next;//head else previous->next=current->next; // ( ) } else puts("not exit"); return head; } int main(void) { student *head,*end; int n; head=create(); print(head); end=(student *)malloc(sizeof(student)); puts("let us add a student's information,please input name and age."); printf("name:"); scanf("%s",end->name); printf("age:"); scanf("%d",&end->age); add(head,end); print(head); puts("please input the age of student you want to delete:"); scanf("%d",&n); dele(head,n); print(head); return 0; }

좋은 웹페이지 즐겨찾기