- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
对 EA 节点包含不同字符串的链表进行排序的正确方法是什么?
stackoverflow 上与冒泡排序相关的所有内容都只考虑一个字符或数字。如何针对字符串调整冒泡排序。
void bubble_sort( struct dictionary_entry * head )
{
struct dictionary_entry * selector;
int swapd;
int i;
int ooseven;
char tword[5];
char tword2[5];
while ( swapd != 0 )
{
swapd = 0;
selector = head;
while ( selector->next_entry != NULL )
{
memcpy( tword, selector->next_entry->four_letters, 5 );
memcpy( tword2, selector->next_entry->next_entry->four_letters, 5 );
}
for ( i = 0; i < 4; ++i )
{
ooseven = tolower( tword[i] ) - tolower( tword2[i] );
if ( ooseven > 0 )
{
swap( selector,
selector->next_entry,
selector->next_entry->next_entry,
selector->next_entry->next_entry->next_entry );
i = 5;
}
else if ( ooseven < 0 )
{
i = 5;
}
}
selector = selector->next_entry;
}
}
void swap( struct dictionary_entry * a,
struct dictionary_entry * b,
struct dictionary_entry * c,
struct dictionary_entry * d )
{
*a = *c;
*c = *b;
*b = *d;
}
如果您认为这个问题可以通过包含单个字符和数字的冒泡排序的答案来回答,您能否解释一下该格式如何成为带有字符串的链表的基础。
如果您想查看的话,这是我的完整代码。请注意,它确实包含很多评论。
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
typedef struct dictionary_entry
{
//int number_of_letters;
char four_letters[5];
struct dictionary_entry * next_entry;
} dictionary_entry;
char sentence[120][120];
char word[120];
char temp_word;
char four_letters[5] = {'\0'};
int word_number;
int number_of_words = -1;
int number_of_letters;
int letter_a;
int letter_b;
void scan();
void print();
void reverse();
void alphabetized();
void display( struct dictionary_entry * head );
void initialize();
void add( struct dictionary_entry ** head, char * four_letters );
void sentence_into_list();
void swap( struct dictionary_entry * a, struct dictionary_entry * b, struct dictionary_entry * c, struct dictionary_entry * d );
void bubble_sort( struct dictionary_entry * head );
struct dictionary_entry * head = NULL;
int main()
{
//Prompt for user and organization of visual output.
printf( "Type a sentence then press enter:\n\n" );
scan();//
printf( "\nA." ); //
print();////
printf( "\n\nB." ); //
reverse();//
printf( "\n\nC." ); //
alphabetized();//
printf( "\n\n" ); //
//initialize();//
sentence_into_list();//
display( head );
bubble_sort( head );
display( head );
return 0;
}
void scan()
{
for ( word_number = 0;; word_number++ )
{
scanf( "%s", sentence[word_number] );
number_of_words++;
if ( getchar() == '\n' )
{
break;
}
}
}
void print()
{
for ( word_number = 0; word_number <= number_of_words; word_number++ )
{
printf( "%s ", sentence[word_number] );
}
}
void reverse()
{
for ( word_number = number_of_words; word_number >= 0; word_number-- )
{
printf( "%s ", sentence[word_number] );
}
}
void alphabetized()
{
for ( word_number = 0; word_number <= number_of_words; word_number++ )
{
strcpy( word, sentence[word_number] );
number_of_letters = strlen( word );
for ( letter_a = 0; letter_a < number_of_letters - 1; letter_a++ )
{
for ( letter_b = letter_a + 1; letter_b < number_of_letters; letter_b++ )
{
// This section compares the two letters.
int sentence = tolower( word[letter_a] ) - tolower( word[letter_b] );
if ( sentence == 0 )
{
sentence = word[letter_a] - word[letter_b];
}
if ( sentence > 0 )
{
temp_word = word[letter_a];
word[letter_a] = word[letter_b];
word[letter_b] = temp_word;
}
}
}
printf( "%s ", word );
}
}
//
// PART TWO OF THE KEIL PROGRAMMING CHALLENGE
//
void add( struct dictionary_entry ** head, char * four_letters ) // do I need wordl and fletters in here?
{
// I changed add from struct to void
struct dictionary_entry * new_entry = malloc( sizeof( struct dictionary_entry ) );
// I have to have code that passes first four letter and the amount of letters here but can i use two portions for both
// the original sentence and the new additions?
//new_entry->number_of_letters = number_of_letters;//_temp;?
memcpy( new_entry->four_letters, four_letters, 5 );
new_entry->next_entry = *head;
*head = new_entry;
// error return head;
}
void sentence_into_list()
{
for ( word_number = 0; word_number <= number_of_words; word_number++ )
{
// number_of_letters = strlen(word);
four_letters[4] = '\0';
memcpy( four_letters, sentence[word_number], 4 );
add( &head, four_letters );
}
}
void display( struct dictionary_entry * head )
{
struct dictionary_entry * current;
current = head;
if ( current != NULL )
{
printf( "Stack:" );
do
{
printf( "%s ", current->four_letters );
current = current->next_entry;
}
while ( current != NULL );
printf( "\n" );
}
else
{
printf( "The Stack is empty\n" );
}
}
void bubble_sort( struct dictionary_entry * head ) //alphabetized
{
//declaration of used variables
struct dictionary_entry * selector; // for node selection
int swapd; // for complete alphabetized contidion lol condition*
int i; //for progression in word comparison
int ooseven; // trying for the alphabetization result
char tword[5], tword2[5]; //for word comparison
//until alphabetized( when there are 0 swaps)
while ( swapd != 0 )
{
swapd = 0;
//list start
selector = head;
while ( selector->next_entry != NULL ) //list progression
{
memcpy( tword, selector->next_entry->four_letters, 5 );
memcpy( tword2, selector->next_entry->next_entry->four_letters, 5 );
//list pair comparison
//2nd, dont need this->//if () //a little lost going top down so ill do bottom up, 1st
}
//goes trhough word
for ( i = 0; i < 4; i++ )
{
ooseven = tolower( tword[i] ) - tolower( tword2[i] );
//compares two letters //3 cases
if ( ooseven > 0 )
{
swap( selector, selector->next_entry, selector->next_entry->next_entry, selector->next_entry->next_entry->next_entry );
//end word comparison
i = 5;
}
else if ( ooseven < 0 )
{
//end word comparison
i = 5;
}
//dont need this caseif(tword[i]=tword2[i])
//continue through word
}
selector = selector->next_entry; //progression abstraction
}
}
void swap( struct dictionary_entry * a, struct dictionary_entry * b, struct dictionary_entry * c, struct dictionary_entry * d )
{
*a = *c; //do i need to *a *c?
*c = *b;
*b = *d;
}
最佳答案
您可以借助以下方法将实际选择的节点与下一个节点进行比较:
if((strcmp(node.String1,node.String2) >0 ){
//Statements
}
使用此功能时,您可以按字母顺序对列表进行排序
关于c - 在 C 语言中,对每个节点包含一个字符串的单链表进行冒泡排序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51356778/
我创建了一个单链表。一切正常。 我只想知道我是否在我的代码中做了任何有潜在危险的事情。我关心的代码片段是我的推送、弹出和清理。部分代码仅用于用户交互,因此并不重要(无论如何我都发布了它,以便更清楚地了
链表:是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题,广义表 单向链表,双向链表,环形链表 PHP的底层是C,当一个程序运行时,内存分成五个区(
我最近开始专注于使用数据结构及其用例的编码练习。下面是我的程序,将数据插入到单个链表中,其中每个节点存储下一个节点的对象。这个程序运行良好。我想了解下面的代码有多有效,所遵循的逻辑是否有效且高效。当节
尝试编写一种方法,从单链表中删除某个值的所有实例,但它似乎不起作用。 我试图适应头部是否包含该值,但我不确定这是否是正确的方法: public void remove (int value) {
struct nodeStruct { int value; struct nodeStruct *next; } struct nodeStruct* List_createNode
typedef struct node { int data; struct node *next; } NODE; NODE* add_head(NODE **phead, int data) {
void addToEnd() { newnode = (struct node*)malloc(sizeof(struct node)); printf ("Enter the cu
我想编写一种方法,从单向链表中删除具有重复数据值的连续项。该方法应返回移除的项目数。该方法应根据需要清理内存,并应假定内存是使用 new 分配的。 比如传入列表 ->a->b->c->c->a->b-
我有一个存储播放列表的表。它的定义非常简单,只有三列: setID - 引用播放列表中的一行的 16 位十六进制 songID - 16 位十六进制数,引用我的歌曲表中的一行 nextID - 16
为什么我的代码不删除链表的最后一个元素?我创建了一个当前指针来横向穿过我的列表并跳出循环..(下一个是我的结构中名为 Card_Node 的点)。回答起来应该很简单,只是不确定为什么它不会删除列表中的
大家好,我现在正在为期中考试学习,正在努力尝试使用单链表创建一个简单的程序。我想让它做的就是将“1”、“2”、“3”、“4”插入列表并打印出来。请看下面的代码: #include #include
我想创建单链表(使用类),其中每个列表中都有:指向文本的指针、整数、指向下一个列表的指针。 我需要实现 3 个功能:插入(将列表插入单链表并根据指针指向的文本使用strcmp对元素进行排序)remov
我已经实现了一个单链表,我注意到了非常奇怪的行为,但无法查明它发生的确切原因。我已经尝试使用 gdb 找出问题所在,看起来每当我计算列表的大小时,事情就开始出错了。这是我用来测试我的实现的程序,下面是
我正在尝试找出一种从链表中间删除的算法.. 我的想法是遍历链表,找到我要删除的节点之前的节点,命名为Nprev,将Nprev设置为Nnext,其中Nnext在要删除的节点之后Ndelete。 所以 N
我正在尝试创建一个简单的单向链表。以前,我成功地做到了这一点,没有任何错误,但是现在我遇到了错误。我怀疑由于第 23 行中的 if 语句,内存分配存在某种问题。 我尝试过的: 我在我的所有声明中都使用
我正在尝试创建一个简单的单向链表。以前,我成功地做到了这一点,没有任何错误,但是现在我遇到了错误。我怀疑由于第 23 行中的 if 语句,内存分配存在某种问题。 我尝试过的: 我在我的所有声明中都使用
我在学习C++语言的同时尝试构建一个链表,并实现一个从最低到最高的节点插入功能。我遵循了互联网和教科书中的一些教程。 我有一个用于链表节点设置的结构: struct Node { private:
本文实例讲述了Python数据结构与算法之链表定义与用法。分享给大家供大家参考,具体如下: 本文将为大家讲解: (1)从链表节点的定义开始,以类的方式,面向对象的思想进行链表的设计 (2)链表
1561/1563 test cases passed 问题描述: You are given two non-empty linked lists representing two non-nega
我有一个任务来实现一个单链表。我试图找出如何获取头部,但最终出现堆栈溢出错误或空指针错误。有人可以帮助我吗?我已经显示了相关的代码片段: public class Llist { privat
我是一名优秀的程序员,十分优秀!