Cプログラミング
 Computer >> コンピューター >  >> プログラミング >> Cプログラミング

印刷スタックを使用してリンクリストを反転します


リンクリストプログラムを使用すると、スタックデータ構造を使用してリストを最後から先頭まで印刷する必要があります

Input : 10 -> 5 -> 3 -> 1 -> 7 -> 9
Output: 9 -> 7 -> 1 -> 3 -> 5 -> 10

ここで、ユーザーは、stack [0]の位置で上を指し、stack[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

  1. Cプログラムで余分なスペースや変更を加えずに、リンクリストの裏面を印刷します。

    タスクは、余分なスペースを使用せずにリンクリストの最後からノードを印刷することです。つまり、余分な変数はなく、最初のノードを指すヘッドポインターが移動します。 例 Input: 10 21 33 42 89 Output: 89 42 33 21 10 再帰的アプローチ(余分なスペースを使用)、リンクリストの反転(指定されたリンクリストの変更が必要)、スタック上の要素のプッシュ、要素のポップと表示など、リンクリストを逆の順序で印刷するソリューションは多数あります。 1つずつ(スペースO(n)が必要)、これらのソリューションはO(1)よりも多くのスペースを使用しているようです。 O(

  2. C ++で再帰を使用して、リンクリストの代替ノードを出力します

    リンクリストは、要素を連続していないメモリ位置に格納する線形データ構造です。すべての要素には、リンクリストの次の要素へのポインタが含まれています。 例 − この問題では、リンクリストが与えられ、このリンクリストの要素を印刷する必要がありますが、代替要素のみが印刷されます。問題をよりよく理解するために例を見てみましょう。 Input : 2 -> 4 -> 1 -> 67 -> 48 -> 90 Output : 2 -> 1 -> 48 説明 −リンクリストに代替要素を出力します。したがって、1番目、3番目、5番目の要素が印刷されます。