- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试使用我在一个程序中学到的冒泡排序方法,该程序用于对已插入链表的书籍进行排序。我试过交换 2 个节点,但这导致 nextptr 也被交换。我启动了这个名为 authsort 的新功能,它没有引用书籍结构中的成员。我需要改变什么才能使这种工作正常进行?
#include<stdlib.h>
#include <stdio.h>
#include<ctype.h>
#include<string.h>
struct book
{
char author[30];
char title[50];
char hold2[50];
char titleins[50];
char genre[15];
int rating;
int comma;
int titleshift;
int number;
};
struct listnode
{
struct book data;
struct listnode *nextptr;
};
typedef struct listnode LISTNODE;
typedef LISTNODE *LISTNODEPTR;
void insert(LISTNODEPTR *sptr, struct listnode data);
void authsort(LISTNODEPTR sptr, struct listnode data);
void freenodes(LISTNODEPTR currentptr);
int add_2 (count, i, j, index, tag);
void print_list(LISTNODEPTR, struct listnode book);
int main ()
{
LISTNODEPTR startptr = NULL;
struct listnode listnode;
struct book book;
int choice = 0;
char item;
int count = 0;
int index = 0;
int j = 0;
char * pch2;
char string[40];
char string2[40];
char * pch;
int i = 0;
while( choice != 2)
{
printf("What Would You Like To Do?\n");
printf("1.Add Books\n2.exit\n3:sort by author\n");
scanf("%d", &choice);
getchar();
switch(choice)
{
case 1:
printf("Enter your book title:");
gets(listnode.data.title);
for(i=0;i<100;i++)
{
listnode.data.title[i] = tolower(listnode.data.title[i]);
}
printf("Enter the author:");
if(listnode.data.title[0] == 't')
{
if(listnode.data.title[1] == 'h')
{
if(listnode.data.title[2] == 'e')
{
if(listnode.data.title[3] == ' ')
{
book.titleshift = 4;
pch = strtok(listnode.data.title, " ");
strcpy(string, pch);
pch2 = strtok(NULL, "");
book.comma = strlen(pch2);
strcpy(string2, pch2);
strncat(string2, string, 20);
strncpy(listnode.data.title, string2, 50);
}
}
}
}
if(listnode.data.title[0] == 'a')
{
if(listnode.data.title[1] == ' ')
{
book.titleshift = 2;
pch = strtok(listnode.data.title, " ");
strcpy(string, pch);
pch2 = strtok(NULL, "");
book.comma = strlen(pch2);
strcpy(string2, pch2);
strncat(string2, string, 20);
strncpy(listnode.data.title, string2, 50);
}
}
gets(listnode.data.author);
for(i=0;i<100;i++)
{
listnode.data.author[i] = tolower(listnode.data.author[i]);
}
printf("Enter the genre:");
gets(listnode.data.genre);
for(i=0;i<100;i++)
{
listnode.data.genre[i] = tolower(listnode.data.genre[i]);
}
printf("Enter the quality:");
scanf("%d", &listnode.data.rating);
printf("Enter the number of pages:");
scanf("%d", &listnode.data.number); // after scanning in from user, we insert and print the list
insert(&startptr, listnode);
print_list(startptr, listnode);
break;
case 2:
freenodes(startptr);
break;
case 3:
authsort(startptr, listnode);
print_list(startptr, listnode);
break;
}
}
return 0;
}
/*********************************FUNCTION*********************************/
void print_list(LISTNODEPTR currentptr, struct listnode book)
{
if (!currentptr)
printf("List is empty.\n\n");
else
{
printf("your list:\n");
while (currentptr)
{
if(currentptr->data.comma > 1)
{
printf("%-15s %-20s %-15s %-15d %-15d\n", currentptr->data.author, currentptr->data.title, currentptr->data.genre, currentptr->data.rating, currentptr->data.number);
currentptr = currentptr -> nextptr; // this will continue printing as long as there in a nextptr, or book
}
else if(currentptr->data.comma == 0)
{
printf("%-15s %-20s %-15s %-15d %-15d\n", currentptr->data.author, currentptr->data.title, currentptr->data.genre, currentptr->data.rating, currentptr->data.number);
currentptr = currentptr -> nextptr; // this will continue printing as long as there in a nextptr, or book
}
}
if(!currentptr)
{
printf("end of list\n\n");
}
}
}
/*********************FUNCTION******************/
void insert(LISTNODEPTR *sptr, struct listnode data)
{
LISTNODEPTR newptr, previousptr, currentptr;
newptr = malloc(sizeof(LISTNODE));
int i = 0;
if (newptr)
{
strcpy(newptr -> data.title,data.data.title);
//if(book.titleshift == 0)
//{
//strcpy(newptr -> title,book.title);
//}
// here the books are being copied into the current node
strcpy(newptr -> data.author, data.data.author);
strcpy(newptr -> data.genre, data.data.genre);
newptr -> data.rating= data.data.rating;
newptr -> data.number= data.data.number;
newptr -> nextptr = NULL;
previousptr = NULL;
currentptr = *sptr;
while (currentptr != NULL && strcmp(data.data.title, currentptr -> data.title)>0)
// this compares the titles to insert by author
{
previousptr = currentptr;
currentptr = currentptr -> nextptr;
}
if (previousptr == NULL)
{
newptr -> nextptr = *sptr;
*sptr = newptr;
}
else
{
previousptr -> nextptr = newptr;
newptr -> nextptr = currentptr;
}
}
else
{
printf("Not inserted.\n");
}
}
/*******************************FUNCTION***********************************/
/**************************FUNCTION*********************/
void freenodes(LISTNODEPTR currentptr)
{
LISTNODEPTR tempptr;
while(currentptr!=NULL)
{
tempptr=currentptr->nextptr;
free(currentptr);
currentptr=tempptr;
}
}
void authsort(LISTNODEPTR sptr, struct listnode data)
{
LISTNODEPTR nextptr;
LISTNODEPTR previousptr;
LISTNODEPTR currentptr;
LISTNODEPTR tempptr;
LISTNODEPTR trail;
int count = 0;
int j = 0;
while(sptr != NULL)
{
count++;
sptr = sptr -> nextptr;
}
for(j=0;j<count;j++)
{
currentptr = sptr;
while(currentptr->nextptr != NULL)
{
if(strcmp(currentptr ->data.author, currentptr->nextptr.data.author)>0)
{
tempptr = currentptr ->nextptr;
currentptr ->nextptr = currentptr ->nextptr->nextptr;
currentptr ->nextptr = currentptr;
if(currentptr == sptr)
sptr = trail = tempptr;
else
trail->nextptr = tempptr;
currentptr = tempptr;
}
trail = currentptr;
currentptr = currentptr->nextptr;
}
}
}
最佳答案
看,您的最终目标应该是拥有一个已排序的链表。现在您正在尝试对两个节点进行排序,但您甚至可以交换它们的数据!
这不涉及指针重定位,并且使您的程序更易于分析和理解。我希望这能提示您找到正确的解决方案!
快乐编码:)
关于c - 用 C 中的结构对链表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30521158/
我想做的是让 JTextPane 在 JPanel 中占用尽可能多的空间。对于我使用的 UpdateInfoPanel: public class UpdateInfoPanel extends JP
我在 JPanel 中有一个 JTextArea,我想将其与 JScrollPane 一起使用。我正在使用 GridBagLayout。当我运行它时,框架似乎为 JScrollPane 腾出了空间,但
我想在 xcode 中实现以下功能。 我有一个 View Controller 。在这个 UIViewController 中,我有一个 UITabBar。它们下面是一个 UIView。将 UITab
有谁知道Firebird 2.5有没有类似于SQL中“STUFF”函数的功能? 我有一个包含父用户记录的表,另一个表包含与父相关的子用户记录。我希望能够提取用户拥有的“ROLES”的逗号分隔字符串,而
我想使用 JSON 作为 mirth channel 的输入和输出,例如详细信息保存在数据库中或创建 HL7 消息。 简而言之,输入为 JSON 解析它并输出为任何格式。 最佳答案 var objec
通常我会使用 R 并执行 merge.by,但这个文件似乎太大了,部门中的任何一台计算机都无法处理它! (任何从事遗传学工作的人的附加信息)本质上,插补似乎删除了 snp ID 的 rs 数字,我只剩
我有一个以前可能被问过的问题,但我很难找到正确的描述。我希望有人能帮助我。 在下面的代码中,我设置了varprice,我想添加javascript变量accu_id以通过rails在我的数据库中查找记
我有一个简单的 SVG 文件,在 Firefox 中可以正常查看 - 它的一些包装文本使用 foreignObject 包含一些 HTML - 文本包装在 div 中:
所以我正在为学校编写一个 Ruby 程序,如果某个值是 1 或 3,则将 bool 值更改为 true,如果是 0 或 2,则更改为 false。由于我有 Java 背景,所以我认为这段代码应该有效:
我做了什么: 我在这些账户之间创建了 VPC 对等连接 互联网网关也连接到每个 VPC 还配置了路由表(以允许来自双方的流量) 情况1: 当这两个 VPC 在同一个账户中时,我成功测试了从另一个 La
我有一个名为 contacts 的表: user_id contact_id 10294 10295 10294 10293 10293 10294 102
我正在使用 Magento 中的新模板。为避免重复代码,我想为每个产品预览使用相同的子模板。 特别是我做了这样一个展示: $products = Mage::getModel('catalog/pro
“for”是否总是检查协议(protocol)中定义的每个函数中第一个参数的类型? 编辑(改写): 当协议(protocol)方法只有一个参数时,根据该单个参数的类型(直接或任意)找到实现。当协议(p
我想从我的 PHP 代码中调用 JavaScript 函数。我通过使用以下方法实现了这一点: echo ' drawChart($id); '; 这工作正常,但我想从我的 PHP 代码中获取数据,我使
这个问题已经有答案了: Event binding on dynamically created elements? (23 个回答) 已关闭 5 年前。 我有一个动态表单,我想在其中附加一些其他 h
我正在尝试找到一种解决方案,以在 componentDidMount 中的映射项上使用 setState。 我正在使用 GraphQL连同 Gatsby返回许多 data 项目,但要求在特定的 pat
我在 ScrollView 中有一个 View 。只要用户按住该 View ,我想每 80 毫秒调用一次方法。这是我已经实现的: final Runnable vibrate = new Runnab
我用 jni 开发了一个 android 应用程序。我在 GetStringUTFChars 的 dvmDecodeIndirectRef 中得到了一个 dvmabort。我只中止了一次。 为什么会这
当我到达我的 Activity 时,我调用 FragmentPagerAdapter 来处理我的不同选项卡。在我的一个选项卡中,我想显示一个 RecyclerView,但他从未出现过,有了断点,我看到
当我按下 Activity 中的按钮时,会弹出一个 DialogFragment。在对话框 fragment 中,有一个看起来像普通 ListView 的 RecyclerView。 我想要的行为是当
我是一名优秀的程序员,十分优秀!