데이터 구조의 동적 단일 체인 표 코드 구현
단일 체인 테이블 구조 와 순서 저장 구조의 장단 점:
저장 할당 방식: 순차 저장 구조 용 세그먼트
연속 적 인 저장 부 는 선형 표 의 데이터 요 소 를 순서대로 저장 합 니 다.
단일 체인 표 는 체인 식 저장 구 조 를 사용 하고 한 조 를 사용한다.
임의의 저장 장치 에 선형 표를 저장 하 는 요소
시간 성능: 찾기 - 순서 구조 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;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
정수 반전Udemy 에서 공부 한 것을 중얼거린다 Chapter3【Integer Reversal】 (예) 문자열로 숫자를 반전 (toString, split, reverse, join) 인수의 수치 (n)가 0보다 위 또는 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.