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

単一のリンクリストを使用して番号を逆の順序で表示するCプログラム


リンクリストは動的メモリ割り当てを使用し、ノードのコレクションです。

ノードには、データとリンクの2つの部分があります。

リンクリストの種類

Cプログラミング言語のリンクリストの種類は次のとおりです-

  • 単一/単一リンクリスト
  • 二重/二重リンクリスト
  • 循環単一リンクリスト
  • 循環二重リンクリスト

単一のリンクリスト

以下の図は、単一のリンクリストの表現を示しています。

単一のリンクリストを使用して番号を逆の順序で表示するCプログラム

以下は、単一のリンクリストを使用して番号を逆の順序で表示するCプログラムです。 −

#include <stdio.h>
#include <stdlib.h>
struct node {
   int num;
   struct node *nextptr;
}*stnode;
void createNodeList(int n);
void reverseDispList();
void displayList();
int main(){
   int n;
   printf("\n\n single Linked List : print it in reverse order :\n");
   printf("------------------------------------------------------------------------------\n");
   printf(" Input the number of nodes : ");
   scanf("%d", &n);
   createNodeList(n);
   printf("\n Data entered in the list are : \n");
   displayList();
   reverseDispList();
   printf("\n The list in reverse are : \n");
   displayList();
   return 0;
}
void createNodeList(int n){
   struct node *fnNode, *tmp;
   int num, i;
   stnode = (struct node *)malloc(sizeof(struct node));
   if(stnode == NULL) {
      printf(" Memory can not be allocated.");
   }
   else{
      // reads data for the node through keyboard
      printf(" Input data for node 1 : ");
      scanf("%d", &num);
      stnode-> num = num;
      stnode-> nextptr = NULL;
      tmp = stnode;
      //Creates n nodes and adds to linked list
      for(i=2; i<=n; i++){
         fnNode = (struct node *)malloc(sizeof(struct node));
         if(fnNode == NULL) {
            printf(" Memory can not be allocated.");
            break;
         }
         else{
            printf(" Input data for node %d : ", i);
            scanf(" %d", &num);
            fnNode->num = num;
            fnNode->nextptr = NULL;
            tmp->nextptr = fnNode;
            tmp = tmp->nextptr;
         }
      }
   }
}
void reverseDispList(){
   struct node *prevNode, *curNode;
   if(stnode != NULL){
      prevNode = stnode;
      curNode = stnode->nextptr;
      stnode = stnode->nextptr;
      prevNode->nextptr = NULL; //convert the first node as last
      while(stnode != NULL){
         stnode = stnode->nextptr;
         curNode->nextptr = prevNode;
         prevNode = curNode;
         curNode = stnode;
      }
      stnode = prevNode; //convert the last node as head
   }
}
void displayList(){
   struct node *tmp;
   if(stnode == NULL){
      printf(" No data found in the list.");
   }
   else{
      tmp = stnode;
      while(tmp != NULL){
         printf(" Data = %d\n", tmp->num);
         tmp = tmp->nextptr;
      }
   }
}

出力

上記のプログラムを実行すると、次の結果が得られます-

Single Linked List : print it in reverse order :
------------------------------------------------------------------------------
Input the number of nodes : 5
Input data for node 1 : 12
Input data for node 2 : 45
Input data for node 3 : 11
Input data for node 4 : 9
Input data for node 5 : 10

Data entered in the list are :
Data = 12
Data = 45
Data = 11
Data = 9
Data = 10

The list in reverse are :
Data = 10
Data = 9
Data = 11
Data = 45
Data = 12

  1. forループを使用して1からNまでのすべての素数を表示するCプログラム

    問題 1からnまでのすべての素数を表示するCプログラムを作成します。これは、実行時にユーザーが指定した値です。 解決策 1からnまでのすべての素数を表示するCプログラムは、実行時にユーザーが指定した値です- アルゴリズム 以下に示すのは、1からnまでのすべての素数を表示するアルゴリズムであり、実行時にユーザーが指定した値です。 ステップ1 −n値を読み取ります。 ステップ2 −カウントの初期化=0 ステップ3 − for i=2からn    a. for j = 1 to i    b. if i % j = 0    

  2. Cのリンクリストを使用した優先キュー

    データと優先度は整数値として与えられ、タスクは与えられた優先度に従ってリンクリストを作成し、結果を表示することです。 キューはFIFOデータ構造であり、最初に挿入された要素が最初に削除されます。優先度付きキューは、優先度に応じて要素を挿入または削除できるキューの一種です。キュー、スタック、またはリンクリストのデータ構造を使用して実装できます。優先キューは、次のルールに従って実装されます- 優先度が最も高いデータまたは要素は、優先度が最も低いデータまたは要素の前に実行されます。 2つの要素の優先度が、順番に実行される要素と同じである場合、それらはリストに追加されます。 優先度付きキュー