개인 재정 C 프로그래밍에서 연결된 목록을 만드는 방법 - C 프로그래밍에서 더미

C 프로그래밍에서 연결된 목록을 만드는 방법 - C 프로그래밍에서 더미

비디오: C언어/C++ 강의 76화 stack [어소트락 게임아카데미] 2024

비디오: C언어/C++ 강의 76화 stack [어소트락 게임아카데미] 2024
Anonim

C 프로그래밍에서 이미 작성한 코드에 두 번째 구조를 추가하려면 서로 포인터를 포함하는 일련의 구조 인 연결 목록을 만듭니다. 구조의 기본 데이터와 함께 구조에는 목록의 다음 구조의 주소를 포함하는 포인터가 들어 있습니다.

포인터 이름을 영리하게 저글링하고 목록의 끝을 씌우려면 NULL을 더하면 A Primitive Linked-List Example의 소스 코드와 비슷한 것으로 끝날 수 있습니다.

기본 연결 목록 예제 #include #include #include int main () {struct 스톡 {char symbol [5]; int 수량; 부유물 가격; 구조체 주식 * 다음;}; 구조체 주식 * 처음; 구조체 주식 * 현재; struct stock * 신품; / * 메모리에 구조체 만들기 * / first = (struct stock *) malloc (sizeof (struct stock)); if (first == NULL) {puts ("어떤 종류의 malloc () 오류"); exit (1);} / * 구조 데이터 할당 * / current = first; strcpy (현재 -> 기호, "GOOG"); current-> quantity = 100; current-> price = 801. 19; current-> next = NULL; new = (struct stock *) malloc (sizeof (struct stock)); if (new == NULL) {puts ("또 다른 malloc () 오류"); exit (1);} current-> next = new; 현재 = 새로운; strcpy (현재 -> 기호, "MSFT"); current-> quantity = 100; current-> price = 28. 77 쪽; current-> next = NULL; / * 데이터베이스 표시 * / puts ("투자 포트폴리오"); printf ("SymboltSharestPricetValuen"); 현재 = 처음; printf ("% - 6st % 5dt %.2ft %.2fn", 전류 -> 기호, 전류 -> 수량, 전류 -> 가격, 전류 -> 수량 * 전류 -> 가격); current = current-> next; printf ("% - 6st % 5dt %.2ft %.2fn", 전류 -> 기호, 전류 -> 수량, 전류 -> 가격, 전류 -> 수량 * 전류 -> 가격); return (0);}

이 소스 코드는 꽤 길지만 첫 번째 구조와 연결된 두 번째 구조를 생성합니다. 소스 코드의 길이가 당신을 협박하게하지 마십시오.

링크 된 목록을 만들 때 typedef를 사용하여 새로운 구조체 변수를 정의하지 마십시오. Primitive Linked-List Example은 typedef를 사용하지 않으므로 코드에서 문제가되지 않지만 많은 C 프로그래머는 구조체와 함께 typedef를 사용합니다. 조심해!

Line 15에서 사용되는 new라는 변수 이름은 C ++의 예약어이기 때문에 이중 언어를 사용하려면 변수 이름을 new_struct 또는 new라는 단어로 변경하십시오.

첫 번째 구조체가 채워지면, 30 행은 NULL 포인터를 다음 요소에 할당합니다.해당 NULL 값은 연결된 목록의 끝을 덮습니다.

32 행은 새로운 포인터 변수에 주소를 배치하여 구조체를 생성합니다. 주소는 38 행의 첫 번째 구조에 저장됩니다. 두 번째 구조의 위치가 유지되는 방법입니다.

40 ~ 43 행은 두 번째 포인터에 대한 정보를 채우고 43 행의 다음 요소에 NULL 값을 할당합니다.

연결은 구조의 내용이 표시 될 때 발생합니다. 48 행은 첫 번째 구조의 주소를 캡처합니다. 그런 다음 54 번째 줄은 첫 번째 구조에서 다음 구조의 주소를 캡처합니다.

연습 1

:

A Primitive Linked-List Example의 소스 코드를 편집기에 입력하십시오. 길기는하지만 나중에 다시 편집해야하기 때문에 입력하십시오 (지금까지 익숙하지 않은 경우). 빌드하고 실행하십시오. 배열과 달리 연결된 목록의 구조에는 번호가 매겨지지 않습니다. 대신 각 구조는 목록의 다음 구조에 연결됩니다. 첫 번째 구조체의 주소를 알고있는 한, NULL로 표시되는 끝까지 목록을 처리 할 수 ​​있습니다. 원시 링크드리스트 예제는 반복 된 코드가 많은 엉성한 소스 코드를 보여줍니다. 코드에서 이와 같이 여러 문장을 볼 때 즉시 "기능"을 생각해야합니다. "

더 나은 연결 목록 예제 #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include # int 수량; 부유물 가격; 구조체 주식 * 다음;}; 구조체 주식 * 처음; 구조체 주식 * 현재; struct stock * 신품; 구조체 스톡 * make_structure (void); 무효 fill_structure (구조체 주식 *, int c); void show_structure (구조체 스톡 * a); int main () {int x; / * 데이터베이스 표시 / puts ("투자 포트폴리오"); printf ("SymboltSharestPricetValuen ("SymboltSharestPricetValuen) ") (구조체 스톡 * 구조체 스톡) * 구조체 스톡 * 구조체 스톡 (구조체 스톡 * 구조체 스톡) * 구조체 스톡 *) void fill_structure (struct stock *) ();}}} void fill_structure (struct malloc ());, intf) {printf ("Item # % d / % d: n", c, ITEMS), printf ("주식 기호:"), scanf ("% s", a-> 기호) show_structure (struct shares * a); () "); scanf ("% d ", & a-> 수량), printf ("주식 가격: "), scanf ("% f ", & a-> {printf ("% - 6st % 5dt %.2ft % 2fn", a-> 기호, a-> 수량, a-> 가격, a-> 수량 * a-> 가격);}

A Better Linked-List Example에 나와있는 것처럼 생성됩니다. 핵심은 세 번째 구조 변수를 사용하는 것입니다 (13 ~ 15 줄에 표시).

먼저 항상 주소를 포함합니다. 목록의 첫 번째 구조 항상.

current는 작업중인 구조의 주소, 데이터로 채워지거나 표시되는 주소를 포함합니다.

new는 malloc () 함수를 사용하여 만든 새로운 구조의 주소입니다.

  • 7 행은 주식 구조를 글로벌로 선언합니다. 그렇게하면 다양한 기능에서 액세스 할 수 있습니다.

  • 25 번째 라인과 39 번째 라인 사이의 for 루프는 새로운 구조체를 생성하여 함께 연결합니다.초기 구조는 특별하기 때문에 그 주소는 30 행에 저장됩니다. 그렇지 않으면 make_structure () 함수로 인해 새로운 구조가 할당됩니다.

  • 35 행에서 이전 구조가 업데이트됩니다. 현재의 값은 36 행까지 변경되지 않습니다. 그 전에는 현재 구조의 포인터가 다음 구조 new의 주소로 업데이트됩니다. Line 40에서 마지막 구조의 새 포인터를 NULL로 재설정하여 링크 된 목록의 끝을 표시합니다.

46 행의 while 루프는 연결된 목록의 모든 구조를 표시합니다. 루프의 조건은 현재 포인터의 값입니다. NULL이 발생하면 루프가 중지됩니다.

더 나은 링크드리스트 예제에 나와있는 나머지 코드는 꽤 자명 한 함수로 구성되어 있습니다.

연습 2

:

더 나은 링크 된 목록 예제의 코드를 편집기에 복사합니다. 빌드하고 실행하십시오.

fill_structure () 함수에서 scanf () 문을 기록하십시오. 포인터에 대한 "peeker"표기법 인 -> 기억하십시오. 주소를 가져 오려면 scanf () 함수에서 & 변수 앞에 접두어를 붙여야합니다.

C 프로그래밍에서 연결된 목록을 만드는 방법 - C 프로그래밍에서 더미

편집자의 선택

행사에서 연설을 신청하는 방법 - 인형

행사에서 연설을 신청하는 방법 - 인형

강연을 제안 할 수 있어야합니다 다른 잠재적 인 연사보다 이벤트 참석자에게 더 많은 가치를 제공 할 수 있음을 입증하십시오. 연설 인재 풀은 가능한 연설 기회 수보다 빠르게 증가하고 있습니다. 당신은 이벤트 기획자에게 당신이 원하는 바를 물어볼 수있었습니다. ...

새로운 온라인 커뮤니티 회원 유치 방법 - 온라인 커뮤니티의 인형

새로운 온라인 커뮤니티 회원 유치 방법 - 온라인 커뮤니티의 인형

회원은 일시적입니다. 많은 사람들은 그들이 특정한 목표를 성취 할 때까지 주변에 머물러 있습니다. 다른 사람들은 관심을 잃고 새로운 행 아웃을 찾습니다. 따라서 정기적으로 신입 회원을 영입하지 않으면 커뮤니티가 사라집니다. 사람들이 교류 할 수있는 장소를 마련하는 데 어려움을 겪고 있습니다.

엄마 블로거로서 언론의 관심을 끄는 방법 - 인형

엄마 블로거로서 언론의 관심을 끄는 방법 - 인형

수십만 (또는 수백만)의 사람들이 엄청난 성과를 거두고 있습니다. 예상대로, 쉽게 성취되지는 않습니다. 뉴욕 타임스에 언급되거나 투데이 쇼에 출연하기 위해서는 많은 시간과 노력과 신뢰가 필요합니다. 아마도 ...

편집자의 선택

Ning 사용자 기고에 대한 코멘트 방법 - 인형

Ning 사용자 기고에 대한 코멘트 방법 - 인형

Ning 계정에 로그인하면 다른 Ning 사용자의 블로그 게시물, 회신 한 이벤트, 사진 및 비디오에 대한 의견을 남깁니다. 회원님의 논평 벽에 남긴 댓글, 순수 텍스트, 다른 웹 사이트 링크 및 퍼간 동영상과 같은 요소가 귀하의 댓글에 포함될 수 있습니다 ...

닝 네트워크의 광고 제어 방법 - 덤프

닝 네트워크의 광고 제어 방법 - 덤프

기본적으로 닝 네트워크는 애드 센스 광고는 오른쪽 열에 있습니다. 누군가 광고를 클릭하면 생성 된 모든 수익이 Ning으로 이동합니다. 네트워크에서 광고를 게재하여 수익을 얻고 싶거나 광고를 전혀 원하지 않는 경우 제어 광고 프리미엄 서비스를 구입해야합니다.

Ning에서 그룹을 만드는 방법 - Dingy

Ning에서 그룹을 만드는 방법 - Dingy

Ning에서 새로운 그룹을 시작하는 것은 가장 멋진 방법 중 하나입니다. 네가 닝 네트워크에서 할 수있는 일. 그룹을 만들 수 있도록 네트워크가 설정되어 있다면 다음 단계를 따르십시오.

편집자의 선택

Canon Rebel T3 시리즈 카메라로 원시 이미지 파일 처리하기 - 더미 파일

Canon Rebel T3 시리즈 카메라로 원시 이미지 파일 처리하기 - 더미 파일

Canon Rebel T3 또는 T3i로 촬영 한 이미지를 원시 데이터로 캡처 할 수 있습니다. Canon 소프트웨어를 사용하는 경우 Raw 파일을 즉시 인쇄 할 수는 있지만 인쇄하기 전에 사진 작업실로 가져 가서 온라인으로 공유하거나 사진 소프트웨어에서 편집 할 수 있습니다.

Canon Rebel T3 시리즈 카메라에서 자동 초점 포인트 설정 - 인형

Canon Rebel T3 시리즈 카메라에서 자동 초점 포인트 설정 - 인형

Canon Rebel T3 또는 T3i를 사용하는 스포츠 모드에서는 카메라가 중심 초점 위치에 초점을 둡니다. Creative 자동 및 A-DEP 모드뿐만 아니라 다른 완전 자동 노출 모드 (장면 인텔리전스 자동, 인물, 풍경 등)에서 카메라의 자동 초점 시스템은 9 개의 자동 초점을 모두 찾습니다 ...