Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> การเขียนโปรแกรม C

พิมพ์ Linked List ย้อนกลับด้วย Stack

ได้รับ Linked List ต้องพิมพ์รายการจากท้ายไปหัว โดยใช้โครงสร้างข้อมูล Stack

Input: 10 → 5 → 3 → 1 → 7 → 9
Output: 9 → 7 → 1 → 3 → 5 → 10

อัลกอริทึม

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 = malloc(...)
    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

ตัวอย่างโค้ด (C)

#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