задача сортировки массива по типу (содержит слова) (c) - PullRequest
0 голосов
/ 16 ноября 2018

Выводы - это ошибка в C. Если вы компилируете и запускаете, не сортирует слова в массивеМоя C информация очень мало.Вы видите мою ошибку на моих кодах?

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>

struct node {
   char data;
   int key;
   struct node *next;
};


struct node *head = NULL;
struct node *current = NULL;

//display the list
void printList() {
   struct node *ptr = head;
   printf("\n");

   //start from the beginning
   while(ptr != NULL) {
      printf("(%d -> %c)",ptr->key,ptr->data);
      printf("\n");
      ptr = ptr->next;
   }
}

//insert link at the first location
void insertFirst(int key, char data) {
   //create a link

   struct node *link = (struct node*) malloc(sizeof(struct node));

   link->key = key;
   link->data = data;

   //point it to old first node
   link->next = head;

   //point first to new first node
   head = link;
}

//is list empty
bool isEmpty() {
   return head == NULL;
}

int length() {
   int length = 0;
   struct node *current;

   for(current = head; current != NULL; current = current->next) {
      length++;
   }

   return length;
}

void buble_sort() {

   int i, j, k, tempKey;
   char tempData;
   struct node *current;
   struct node *next;

   int size = length();
   k = size ;

   for ( i = 0 ; i < size - 1 ; i++, k-- ) {
      current = head;
      next = head->next;

      for ( j = 1 ; j < k ; j++ ) {   

         if ( current->data > next->data ) {
            tempData = current->data;
            current->data = next->data;
            next->data = tempData;

            tempKey = current->key;
            current->key = next->key;
            next->key = tempKey;
         }

         current = current->next;
         next = next->next;
      }
   }   
}    

void main() {
   insertFirst(1,"Papatya");
   insertFirst(2,"DortKardes");
   insertFirst(3,"Toroslu");
   insertFirst(4,"PostEdu");
   insertFirst(5,"Adana");

   buble_sort();

   printf("Buble Sort ile Siralanmis Hali : ");
   printList();
}

1 Ответ

0 голосов
/ 16 ноября 2018

Вы должны прочитать об указателях и работать со строками в c.

Как уже упоминалось в комментариях. Чтобы содержать строку, вы должны использовать char *.

Вот пример рабочего кода:

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdbool.h>

struct node {
   char *data;
   int key;
   struct node *next;
};


struct node *head = NULL;
struct node *current = NULL;

//display the list
void printList() {
   struct node *ptr = head;
   printf("\n");

   //start from the beginning
   while(ptr != NULL) {
      printf("(%d -> %s)",ptr->key,ptr->data);
      printf("\n");
      ptr = ptr->next;
   }
}

//insert link at the first location
void insertFirst(int key, char *data) {
   //create a link

   struct node *link = (struct node*) malloc(sizeof(struct node));

   link->key = key;
   link->data = data;

   //point it to old first node
   link->next = head;

   //point first to new first node
   head = link;
}

//is list empty
bool isEmpty() {
   return head == NULL;
}

int length() {
   int length = 0;
   struct node *current;

   for(current = head; current != NULL; current = current->next) {
      length++;
   }

   return length;
}

void buble_sort() {

   int i, j, k, tempKey;
   char *tempData = NULL;
   struct node *current;
   struct node *next;

   int size = length();
   k = size ;

   for ( i = 0 ; i < size - 1 ; i++, k-- ) {
      current = head;
      next = head->next;

      for ( j = 1 ; j < k ; j++ ) {   

      if ( strcmp(current->data, next->data) > 0 ) {
            tempData = current->data;
            current->data = next->data;
            next->data = tempData;

            tempKey = current->key;
            current->key = next->key;
            next->key = tempKey;
         }

         current = current->next;
         next = next->next;
      }
   }   
}    

void main() {
   insertFirst(1,"Papatya");
   insertFirst(2,"DortKardes");
   insertFirst(4,"PostEdu");
   insertFirst(5,"Adana");
   insertFirst(3,"Toroslu");

   buble_sort();

   printf("Buble Sort ile Siralanmis Hali : ");
   printList();
}
...