데이터 구조, 링크 기본 조작
5489 단어 링크 조작
다음은 기본 적 인 알고리즘 설명 을 드 리 겠 습 니 다.
그림 1: 링크 형식의 정의 와 링크 요 소 를 얻 는 알고리즘 설명
그림 2: 링크 의 삽입 알고리즘 설명
그림 3: 링크 의 삭제 알고리즘 설명
그림 4: 링크 생 성 알고리즘 설명
입력
입력 데 이 터 는 한 그룹 만 있 고 첫 번 째 줄 은 n + 1 개의 정수 가 있 으 며 첫 번 째 정 수 는 이 줄 의 나머지 정수 n 이 고 그 다음은 n 개의 정수 이다.이 줄 의 정 수 는 목록 을 초기 화 하 는 데 사용 되 며, 입력 순 서 는 목록 의 순서 와 반대 된다. 즉, 목록 에 1, 2, 3 이 있 으 면 입력 순 서 는 3, 2, 1 이다.
두 번 째 줄 에는 정수 m 가 있 는데, 대표 아래 에는 m 줄 이 있다.줄 마다 문자열 이 있 습 니 다. 문자열 은 "get", "insert", "delete", "show" 중의 하나 입 니 다."get" 또는 "delete" 라면 그 다음 에 정수 a 를 따 르 면 첫 번 째 요 소 를 얻 거나 삭제 하 는 것 을 의미 합 니 다."insert" 라면 그 다음 에 두 개의 정수 a 와 e 를 따라 a 번 째 위치 앞 에 e 를 삽입 하 는 것 을 의미 합 니 다.쇼 이후 에는 정수 가 없다.
출력
가 져 오 는 데 성공 하면 이 요 소 를 출력 합 니 다.삭제 에 성공 하면 출력 "delete" OK”;가 져 오 는 데 실패 하거나 삭제 에 실패 하면 "get" 을 출력 합 니 다. fail 및 "delete" fail”。삽입 에 성공 하면 출력 "insert OK ", 그렇지 않 으 면 출력" insert fail”。"show" 라면 목록 에 있 는 모든 요 소 를 출력 하고 목록 이 비어 있 으 면 "Link" 를 출력 합 니 다. list is empty”。주: 모든 작은 따옴표 가 출력 되 지 않 습 니 다.
샘플 입력
3 3 2 121showdelete 1showdelete 2showdelete 1showdelete 2insert 2 5showinsert 1 5showinsert 1 7showinsert 2 5showinsert 3 6showinsert 1 8showget 2
샘플 출력
1 2 3delete OK2 3delete OK2delete OKLink list is emptydelete failinsert failLink list is emptyinsert OK5insert OK7 5insert OK7 5 5insert OK7 5 6 5insert OK8 7 5 6 57
#include
#include
#include
#define NULL 0
struct stu{
int num;
struct stu *next;
};
int N,n;
int num3;
struct stu *creat(){
struct stu *head;
struct stu *p1=NULL;
struct stu *p2=NULL;
n=0;
p1=(struct stu *)malloc(sizeof(struct stu));
p2=p1;
if(p1==NULL)
return NULL;
else {
head =NULL;
scanf("%d",&(p1->num));
num3=p1->num;
}
while(nnext=NULL;
}
else{
p2->next=p1;
}
p2=p1;
p1=(struct stu *)malloc(sizeof(struct stu));
scanf("%d",&(p1->num));
num3=p1->num;
}
p2->next=NULL;
free(p1);
p1=NULL;
return head;
};
struct stu *del(struct stu *head,int num){
struct stu *p1;
struct stu *p2;
if(head==NULL){
printf("delete fail
");
return head;
}
p1=head;
n=1;
while(nnext!=NULL){
p2=p1;
p1=p1->next;
n++;
}
if(n==num){
if(p1==head){
head=p1->next;
}
else{
p2->next=p1->next;
}
free(p1);
p1=NULL;
N-=1;
printf("delete OK
");
}
else{
printf("delete fail
");
}
return head;
};
struct stu *insert(struct stu *head,struct stu *node,int num1){
struct stu *p1;
n=1;
if(head==NULL){
if(num1==1){
head=node;
node->next=NULL;
N+=1;
printf("insert OK
");
}
else
printf("insert fail
");
return head;
}
p1=head;
if(head!=NULL&&num1==1){
node->next=p1;
head=node;
printf("insert OK
");
return head;
}
while(nnext!=NULL){
n++;
p1=p1->next;
}
if(n==num1-1){
node->next=p1->next;
p1->next=node;
N++;
printf("insert OK
");
}
else {
printf("insert fail
");
}
return head;
};
struct stu *reverse(struct stu *head){
struct stu *p;
struct stu *p1;
struct stu *p2;
p1=NULL;
p2=head;
while(p2!=NULL){
p=p2->next;
p2->next=p1;
p1=p2;
p2=p;
}
head =p1;
return head;
};
void print(struct stu *head){
struct stu *p;
p=head;
if(head!=NULL){
do{
printf("%d",p->num);
p=p->next;
if(p!=NULL)
printf(" ");
}while(p!=NULL);
printf("
");
}
else printf("Link list is empty
");
}
void gt(struct stu *head,int num){
struct stu *p;
p=head;
n=1;
while(nnext!=NULL){
p=p->next;
n++;
}
if(n==num){
printf("%d
",p->num);
}
else
printf("get fail
");
}
int main(){
struct stu *head;
struct stu *stu1;
scanf("%d",&N);
head=creat();
//print(head);
head=reverse(head);
//print(head);
//int num;
int i,j;
//scanf("%d",&num);
//printf("%d
",num);
char s[20];
int num1,num2;
for(i=0;inum));
head=insert(head,stu1,num1);
}
else if(strcmp(s,"get")==0){
scanf("%d",&num1);
gt(head,num1);
}
memset(s,'\0',sizeof(s));
}
return 0;
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C \ # 링크 조작링크 작업 에 대해 C \ # 에서 마이크로소프트 는 링크 드 List 의 데이터 구 조 를 제 공 했 고 이런 방법 을 통 해 링크 작업 을 실현 할 수 있 습 니 다. 여기 서 저 는 코드 를 제공 합 니 다. ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.