개인 재정 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 프로그래밍에서 더미

편집자의 선택

JavaScript에서 HTML 양식 요소에 액세스하는 방법 - 다른 HTML 요소와 마찬가지로

JavaScript에서 HTML 양식 요소에 액세스하는 방법 - 다른 HTML 요소와 마찬가지로

자바 스크립트에서 HTML5 요소와 직접 상호 작용할 수 있습니다. 트릭은 선택한 요소가 지원해야하는 브라우저 및 플랫폼에서 작동하는지 확인하는 것입니다. 이 예제에서는 및 태그를 다음과 같은 솔루션의 일부로 사용하는 방법을 보여줍니다.

CSS 값 정의에 대한 빠른 가이드 구문 - 인형

CSS 값 정의에 대한 빠른 가이드 구문 - 인형

W3C (World Wide Web Consortium)에서 모든 CSS 속성의 구문과 가능한 값을 정의합니다. 정의를 가능한 한 정확하게 만들기 위해 W3C는 CSS 값 정의 구문이라는 공식 시스템을 사용합니다. 정의 구문은 가능한 값을 매우 정확하게 정의하지만 CSS 값 정의 구문을 읽는 중 ...

JavaScript로 동적 HTML 요소를 작성하는 방법 - 더미

JavaScript로 동적 HTML 요소를 작성하는 방법 - 더미

모든 페이지에 대한 특수 효과는 페이지에 동적 HTML 변경 기능을 제공하는 것입니다. 예를 들어 다음 예제와 같이 선택한 요소에 특수 효과를 만들 수 있습니다. function ChangeStyles (event) {// 요소에 대한 참조를 얻습니다. var ThisElement ...

편집자의 선택

Excel 2013 통합 문서의 변경 내용 수락 또는 거부 방법 - 변경 내용 추적을 설정하면 더미

Excel 2013 통합 문서의 변경 내용 수락 또는 거부 방법 - 변경 내용 추적을 설정하면 더미

Excel 2013 통합 문서의 경우 리본의 검토 탭에있는 변경 내용 추적 명령 단추의 드롭 다운 메뉴에서 Alt / RGC를 눌러 변경 내용 적용 / 거부 옵션을 선택하여 수락 또는 거부 할 변경 내용을 결정할 수 있습니다. 이렇게하면 Excel이 강조 표시된 모든 변경 내용을 검토합니다 ...

Excel에서 셀에 설명을 추가하는 방법 2016 - 문자

Excel에서 셀에 설명을 추가하는 방법 2016 - 문자

Excel 2016 워크 시트의 특정 셀에 주석을 달 수 있습니다. 댓글은 스티커 메모의 전자 팝업 버전과 유사합니다. 셀에 주석을 추가하려면 다음과 같이하십시오. 셀 포인터를 이동하거나 주석을 추가 할 셀을 클릭하십시오. 새 주석을 클릭하십시오.

Excel 피벗 테이블에 계산 된 필드를 추가하는 방법 - 더미

Excel 피벗 테이블에 계산 된 필드를 추가하는 방법 - 더미

피벗 테이블 내부의 값을 계산합니다. 계산 된 필드 및 항목을 표에 추가 할 수 있습니다. 계산 된 필드를 추가하면 새로운 행이나 열을 피벗 테이블에 삽입 한 다음 수식을 사용하여 새 행이나 열을 채울 수 있습니다. 예를 들어 다음과 같이 나타납니다.

편집자의 선택

포토샵 CS6에서 히스토리 기능으로 채우기를 사용하는 방법 - 더미

포토샵 CS6에서 히스토리 기능으로 채우기를 사용하는 방법 - 더미

채우기 Adobe Photoshop의 기능 Creative Suite 6는 선택을 원할 때 유용합니다. 특정 상태로 바꿀 영역을 쉽게 선택할 수 있으면 기록으로 채우기 기능을 사용할 수 있습니다. 특정 이미지에서 하늘이 마음에 들지 않는다고 가정 해보십시오. 선택한 항목 ...

Photoshop CS6에서 패싯 필터를 사용하는 방법 -

Photoshop CS6에서 패싯 필터를 사용하는 방법 -

Photoshop CS6의 이미지는 먼지와 스크래치를 줄이거 나 날카로운 모서리를 부드럽게하는 것입니다. 패싯 필터는 포스터 라이징 효과를 사용하여 이미지를 분할합니다. Photoshop CS6에서 이미지를 흐리게 처리하려는 한 가지 이유는 먼지 및 스크래치를 줄이거 나 밝기를 비슷하게하는 픽셀 블록을 모아서 기하학적 모양을 사용하여 단일 값으로 변환하기 때문입니다.

Photoshop CS6에서 손 도구 사용 방법 - 인형

Photoshop CS6에서 손 도구 사용 방법 - 인형

Photoshop CS6 손 도구는 이미지 문서에서 빠르게 이동하고 스크롤 막대와 유사하게 작업하여 작업을보다 신속하게 수행 할 수 있습니다. 손 도구는 손 도구를 클릭 할 필요가 거의 없기 때문에 실제 도구보다 기능이 더 많습니다. 간단히 ...