조세 프 링 (머리 결 점 없 는 순환 링크)
17781 단어 데이터 구조
이 프로그램 을 통 해 순환 링크 를 만 드 는 방법 과 지침 에 관 한 많은 문 제 를 익 혔 다.이 문 제 는 헤드 포인터 가 없 는 순환 링크 를 채택 했다.1. 헤드 포인터 가 없 는 순환 링크 와 일반적인 순환 링크 의 차 이 를 알 게 되 었 습 니 다.2. 링크 길이 에 대한 구법.3. 링크 를 만 들 때 보통 꼬리 지침 을 되 돌려 주 고 꼬리 지침 은 머리 지침 을 쉽게 찾 을 수 있 습 니 다.그리고 지침 을 사용 할 때마다 지침 을 저장 하 세 요.4.
typedef struct Node {
int id;
int password;
struct Node *next;
}Nodetype;
구조 체 정의 시 stuct Nodetype * next 를 사용 할 수 없 는 것 은 프로그램 이 이 문 구 를 실 행 했 을 때 type: def 문 구 는 Nodetype 을 정의 하지 않 았 기 때 문 입 니 다.5. YueSeFu 함수 에 두 개의 포인터 가 사용 되 었 습 니 다.
Nodetype *LA = r;
Nodetype *LB = r->next;
이 두 개의 포인 터 를 사용 하면 LB 의 앞 구 를 쉽게 찾 아 결점 을 삭제 하 는 작업 을 할 수 있 습 니 다. 매번 반복 해서 현 재 를 삭제 하지 않 아 도 됩 니 다.시간의 복잡 도 를 낮 추 었 다.O(n) -> O(1)。 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 다음은 코드 입 니 다.
#include
#include
typedef struct Node {
int id;
int password;
struct Node *next;
}Nodetype;
Nodetype *Creatlist(){
Nodetype *L;
Nodetype *pNew,*r;
int ID = 1;
int m;
int MAX;
int count = 0;
L = (Nodetype*)malloc(sizeof(Nodetype));
L->next = NULL;
r= L;
printf(" :");
scanf("%d",&MAX);
while (count < MAX){
pNew = (Nodetype*)malloc(sizeof(Nodetype));
printf("please enter the %d th password:
",ID);
pNew->id = ID++;
scanf("%d",&m);
pNew->password = m;
r->next = pNew;
r = pNew;
count = count + 1;
}
r->next = L->next;
return r;
}
void Output(Nodetype *L){
Nodetype *p;
p = L->next;
printf(" %d %d
",p->id,p->password);
p = p->next;
while(p != L->next) {
printf(" %d %d
",p->id,p->password);
p = p->next;
}
}
int Count(Nodetype *L){
Nodetype *p;
int count = 1;
p = L;
while(L->next != p){
L = L->next;
count = count + 1;
}
return count;
}
void YueSeFu(Nodetype *r, int m) {
int t = m;
Nodetype *LA = r;
Nodetype *LB = r->next;
while (1) {
if (Count(LA) == 2) {
if (t % 2 == 1) {
printf(" :%d :%d
", LB->id, LB->password);
printf(" :%d :%d
", LA->id, LA->password);
break;
} else {
printf(" :%d :%d
", LA->id, LA->password);
printf(" :%d :%d
", LB->id, LB->password);
break;
}
} else {
for (int i = 1; i < t; i++) {
LA = LA->next;
LB = LB->next;
}
printf(" :%d :%d
", LB->id, LB->password);
if (Count(LA) == 1) {
break;
}
t = LB->password;
LB = LB->next;
printf("
");
LA->next = LB;
}
}
}
int main(){
Nodetype *L;
int password;
L =Creatlist();
Output(L);
printf(" :
");
scanf("%d",&password) ;
YueSeFu(L,password);
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에 따라 라이센스가 부여됩니다.