Computer >> 컴퓨터 >  >> 프로그램 작성 >> C 프로그래밍

단일 연결 리스트를 사용하여 숫자를 역순으로 표시하는 C 프로그램

<시간/>

연결 목록은 동적 메모리 할당을 사용하며 노드 모음입니다.

노드는 데이터와 링크의 두 부분으로 구성됩니다.

연결 목록의 유형

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