단일 링크드리스트에서 역방향 출력은 어떻게 해야 할까요..?
돌삥
#include stdio.h
#include windows.h
#include malloc.h
#include conio.h
//---- 노드 구조체
typedef struct _node
{
int Data;
struct _node *next;
}Node;
//---- 노드의 헤더
Node *head;
//---- 입 력
void fnInput()
{
Node *newnode , *cur;
newnode = (Node*)malloc( sizeof(Node) );
newnode-next = NULL;
printf(정수 입력 : );
scanf(%d , &newnode-Data );
if( head == NULL )
{
head = newnode;
}
else
{
for( cur = head ; cur-next != NULL ; cur = cur-next ) ;
cur-next = newnode;
}
}
void del()
{
Node *temp;
if(head!=NULL)
{
temp = head;
head = head-next;
delete temp; // root가 삭제할 노드 다음 노드를 가리키고 있음으로
// 리스트를 잃어버리지 않고 맨 앞의 노드를 삭제함.
}
}
void del2()
{
Node *prev=NULL;
Node *temp=head; // 노드 탐색에서 현재 선택된 노드를 가리키는 포인터
if(head!=NULL) // 삭제할 노드가 없는 경우가 아니라면
{
while(temp-next!=NULL) // 현재 노드의 다음 노드가 존재하면
{
prev = temp; // 현재 노드가 이전 노드가 되고
temp = temp-next; // 다음 노드가 현재의 노드가 된다.
}
/* while문이 끝나면 현재 노드의 다음 노드가 존재하지 않는 경우
즉, temp가 가리키는 노드가 마지막 노드 */
prev-next = NULL; // 마지막 노드의 바로 이전 노드가 마지막 노드가 되어야 함.
delete temp; // 마지막 노드는 삭제.
}
}
//----- 출 력
void fnOutput()
{
int i=1;
if( head == NULL )
{
printf(출력할 데이터가 없습니다 \n ) ;
return;
}
for(Node *cur = head ; cur != NULL ; cur = cur-next)
{
printf(-----------------------------[%d]\n , i++ );
printf(Node의 주소 : %d \n , cur ) ;
printf(Data : %d \n , cur-Data ) ;
printf(Node-next의 주소 : %d \n , cur-next ) ;
}
}
//----- 메 뉴
void fnMene()
{
int choice;
while(1)
{
system(cls);
printf([1]입력 [2]출력 [3]FIFO [4]LIFO [5]종료 \n);
printf(선택 : [ ]\b\b\b); scanf(%d , &choice ) ;
switch( choice )
{
case 1 : fnInput(); break; // 입력
case 2 : fnOutput(); break; // 출력
case 3 : del(); break;
case 4 : del2(); break;
case 5 : return; // 종료
default : printf(choice Error!\n);
}
system(pause);
}
}
void fnExit()
{
Node *cur = head;
if( head == NULL )
{
return;
}
else
{
while( cur != NULL )
{
//---- 동적 할당 해제 ...
head= cur-next;
free(cur);
cur = NULL ;
cur = head;
}
}
}
//---- MAIN
void main()
{
fnMene(); // 메 뉴
fnExit(); // 종료 & 동적 할당 해제
}
현제 구현된것이 앞쪽부터 삭제 하는거랑 뒷쪽부터 삭제 뭐 출력 다 되있는데.
출력방향을
A-B-C 이런식으로 나오는데 이걸 반대로 C B A 이런으로 나타내려고 합니다.
재귀함수도 생각중이고, 이중연결리스트를 만들어 삭제처럼 뒷부분부터 빼올까도 생각중인데....
관련 리플이나 소스 달아주시면 감사하겠습니다.
-
한내
다음이 다음을 가르키잖아요.... 이전을 가르키는게 있으면 될거에요.... 있나요???
-
도움
단일 링크드 리스트는 역방향을 고려하지 않아도 되는 경우에 사용합니다.
역방향으로 리스트를 움직여야 할 경우에는 양방향 링크드 리스트를 사용하는 것이 가장 적합합니다. -
가을
스택을 이용해 보시길 바랍니다.
끝이 나올때까지 반복하면서 데이터를 스택에 넣은 다음에
끝이 나오면 하나씩 스택에서 꺼내면서 출력해주면 됩니다.
번호 | 제 목 | 글쓴이 | 날짜 |
---|---|---|---|
2693842 | 포인터 변수의 주소값끼리 더하는 것에 대해서 질문드립니다. (1) | 진솔 | 2025-05-05 |
2693811 | 소수 출력;;;; | 화이트캣 | 2025-05-05 |
2693788 | 이런 함수는 없나요? (3) | 앤드류 | 2025-05-05 |
2693758 | txt파일 불러와서 행렬로 저장 | 큰애 | 2025-05-05 |
2693727 | scanf 오류 문제!! (2) | 큰나래 | 2025-05-04 |
2693704 | 구조체 주소록 문제인데 도와주세요 (2) | 도1도캣 | 2025-05-04 |
2693676 | 열혈강의 c언어 질문입니다 | 하양이 | 2025-05-04 |
2693647 | 12.620000 을요 12.620 으로 어떻게 표현해요? (2) | 파도 | 2025-05-04 |
2693619 | 타이틀 코드.. | 단순드립 | 2025-05-03 |
2693591 | 컴파일 에러에서 질문드립니다 (3) | 게자리 | 2025-05-03 |
2693463 | 동적할당 이용시 fwrite사용을 어떻게 해야하나요..? (10) | 일본어못해요 | 2025-05-02 |
2693387 | 배열문제입니다 수정오류캡쳐했습니다 (6) | 연하얀 | 2025-05-01 |
2693356 | text 입출력 내림차순 질문입니다 ㅠ | 빛글 | 2025-05-01 |
2693328 | C언어를이용해서 .txt파일 외에 다른 확장자 파일 삭제가 가능한지.. (2) | 대나무 | 2025-05-01 |
2693299 | 파일입출력 바이너리파일 | 독특한 | 2025-04-30 |
2693273 | 오류 (1) | 귀1여운렩 | 2025-04-30 |
2693080 | visual studio 2008 express edition 등록키 말인데요 | 얀별 | 2025-04-28 |
2693053 | 배열, 구조체 관련 프로그래밍 질문드립니다. | 싸리 | 2025-04-28 |
2693025 | 프로그램을 짜봤는데요 ㅠㅠ | 상처입은마음 | 2025-04-28 |
2693001 | 워닝문제, 세그멘트결함문제 (1) | 월식 | 2025-04-28 |