연결 목록이 주어지면 프로그램은 스택 데이터 구조를 사용하여 끝에서 앞으로 목록을 인쇄해야 합니다.
Input : 10 -> 5 -> 3 -> 1 -> 7 -> 9 Output: 9 -> 7 -> 1 -> 3 -> 5 -> 10
여기서 사용자는 스택[0] 위치에서 맨 위를 가리키는 스택에서 요소를 팝핑하고 스택[n] 요소까지 이동하는 접근 방식을 사용할 수 있습니다.
알고리즘
START Step 1 -> create structure Linked_list Declare int data Declare struct linked_list *next End Step 2 -> declare int stack[30], top = -1 Step 3 -> declare struct linked_list* head = NULL Step 4 -> create function int printfromstack(int stack[]) Loop While top>=0 Print stack[--top] End Step 5 -> create function int push(struct linked_list** head, int n) declare struct linked_list* newnode = (struct linked_list*)malloc(sizeof(struct linked_list)) set newnode->data = n set newnode->next = (*head) set (*head) = newnode step 6 -> create function int intostack(struct linked_list* head) Loop While head!=NULL Print head->data Set stack[++top] = head->data Set head = head->next End End Step 7 -> goto main() Call push(&head, 10) Call push(&head, 20) Call push(&head, 30) Call push(&head, 40) Call intostack(head) Call printfromstack(stack) STOP
예시
#include <stdio.h>
#include <stdlib.h>
struct linked_list {
int data;
struct linked_list *next;
};
int stack[30], top = -1;
struct linked_list* head = NULL;
int printfromstack(int stack[]) {
printf("\nStack:\n");
while(top>=0) {
printf("%d ", stack[top--]);
}
}
int push(struct linked_list** head, int n) {
struct linked_list* newnode = (struct linked_list*)malloc(sizeof(struct linked_list));
newnode->data = n;
newnode->next = (*head);
(*head) = newnode;
}
int intostack(struct linked_list* head) {
printf("Linked list:\n");
while(head!=NULL) {
printf("%d ", head->data);
stack[++top] = head->data;
head = head->next;
}
}
int main(int argc, char const *argv[]) {
push(&head, 10);
push(&head, 20);
push(&head, 30);
push(&head, 40);
intostack(head);
printfromstack(stack);
return 0;
} 출력
위의 프로그램을 실행하면 다음 출력이 생성됩니다.
Linked list: 40 30 20 10 Stack: 10 20 30 40