char(包含单词)数组冒泡排序问题(三)

时间:2018-11-16 12:44:32

标签: c char bubble-sort word

在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 :(得分:0)

您应该阅读有关指针的知识,并在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();
}