- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试学习链表,我只是为了练习而制作这个程序。它包含由两个结构体组成的多个链表。struct letterLink 中的所有内容都工作正常(typedef ss)该链接列表仅采用一串用户输入的字符,向后打印它们,然后按字母顺序对它们进行排序。
一切正常。
另一个名为 struct wordLink (typedef sw) 的链表给我带来了麻烦。我试图根据字母字符串中的空格来解析已经输入到单词链接列表中的字母字符串。
它是通过调用函数createWordList 和appendWord 创建的。
然后用printWord打印。
现在不用担心在主函数中按字母顺序对单词进行排序的说法,因为我还没有使用该函数。
我还知道,当用户在单词之间输入多个空格时,createWordList 函数中可能会出现一个错误,因为在离开内部 while 循环后,ptr->letter 将是 32(ascii 空格),因此不满足条件回到那个循环。我稍后会处理这个问题。
目前,我正在尝试创建单词链接列表,但这甚至不会打印第一个单词。
任何提示或帮助将不胜感激,因为我刚刚学习这个,并且不明白为什么它不起作用。
谢谢。为了编译的目的,我将完整地发布,但是我只处理这个程序中 freeWord 之前的最后三个函数。 (createWordList使用printWord打印的appendWord)
谢谢。
#include <stdio.h>
#include <stdlib.h>
typedef struct linkletter{
char letter;
struct linkletter* next;
} ss;
typedef struct linkword{
char word[20];
struct linkword* next;
} sw;
ss * createLetter(char);
sw * createWordList(ss* strt);
ss * readLetter(void);
ss * append(ss* end, ss * newLetter);
sw* appendWord(sw* endWord, sw* newWord);
void printLetter(ss*);
void printWord(sw*);
void freeLetter(ss*);
void freeWord(sw *wordStart);
ss * searchLetter(ss* start, char letter);
ss * insertAtFront(ss* start, ss* newptr);
ss * reverseLetter(ss* start);
ss * sortedCopy(ss* start);
ss * insertIntoSorted(ss* start, ss* newLet);
int main (void){
ss *start, *backwards, *sorted;
sw *wordStart;
printf("enter as many words as you wish separated by spaces:\n (Max 20 letters per word)\n");
start=readLetter();
printf("\nyou typed:");
printLetter(start);
printf("\nBackwards: ");
backwards= reverseLetter(start);
printLetter(backwards);
printf("\nSorted by Letter: ");
sorted=sortedCopy(start);
printLetter(sorted);
printf("\nYour words in alphetical order:\n");
wordStart=createWordList(start);
printWord(wordStart);
freeLetter(start);
freeLetter(backwards);
freeLetter(sorted);
freeWord(wordStart);
return 0;
}
ss *createLetter(char let){
ss *ptr;
ptr=(ss*)malloc(sizeof(ss));
ptr->letter=let;
ptr->next=NULL;
return ptr;
}
ss * readLetter(void){
char c;
ss *end, *start, *newLetter;
start=NULL;
scanf("%c",&c);
while(c!='\n'){
newLetter=createLetter(c);
if (start==NULL){
start = newLetter;
end=start;
} else {
end=append(end,newLetter);
}
scanf("%c",&c);
}
return start;
}
ss *append (ss *end, ss *newLetter){
end->next=newLetter;
return end->next;
}
void printLetter(ss *start){
ss* ptr =start;
while(ptr!=NULL){
printf("%c",ptr->letter);
ptr=ptr->next;
}
}
void freeLetter(ss *start){
ss* ptr=start;
ss *tmp;
while(ptr!=NULL){
tmp=ptr->next;
free(ptr);
ptr=tmp;
}
}
ss * searchLetter(ss* start, int number){
ss* ptr = start;
while((ptr!=NULL) && (ptr->letter!=number)){
ptr=ptr->next;
}
return(ptr);
}
ss* insertAtFront(ss* start, ss* newptr){
newptr->next=start;
return(newptr);
}
ss * reverseLetter(ss* start){
ss *ptr= start;
ss *bstart = start;
ss* newLetter;
if (start!=NULL){
bstart=createLetter(start->letter);
ptr=ptr->next;
}
while(ptr != NULL) {
newLetter=createLetter(ptr->letter);
bstart=insertAtFront(bstart, newLetter);
ptr=ptr->next;
}
return(bstart);
}
ss* insertIntoSorted(ss* start, ss* newLet){
ss* ptr = start;
ss* prev = NULL;
while((ptr!=NULL) && (ptr->letter<newLet->letter)){
prev=ptr;
ptr=ptr->next;
}
if(prev == NULL) {
start = insertAtFront(start,newLet);
} else {
prev->next = newLet;
newLet->next = ptr;
}
return(start);
}
ss* sortedCopy (ss* start){
ss* ptr = start;
ss * sortedStart= NULL;
ss* newLetter;
if(start!=NULL) {
sortedStart = createLetter(start->letter);
ptr=ptr->next;
}
while(ptr!=NULL){
newLetter = createLetter(ptr->letter);
sortedStart = insertIntoSorted(sortedStart, newLetter);
ptr = ptr->next;
}
return(sortedStart);
}
sw* createWordList(ss* start){
ss *ptr=start;
sw *ptrWord=NULL;
sw *endWord;
sw *wordStart=ptrWord;
int i=0;
while(ptr->letter!='\n'){
ptrWord=(sw*)malloc(sizeof(sw));
while(ptr->letter!=32) {
ptrWord->word[i]=ptr->letter;
ptr=ptr->next;
i++;
}
ptrWord->next=NULL;
if(wordStart==NULL){
wordStart=ptrWord;
endWord=wordStart;
} else {
appendWord(endWord,wordStart);
}
}
return wordStart;
}
sw* appendWord(sw* endWord, sw* newWord){
endWord->next=newWord;
return endWord->next;
}
void printWord(sw *wordStart){
sw* ptrWord =wordStart;
while(ptrWord!=NULL){
printf("%s",ptrWord->word);
ptrWord=ptrWord->next;
}
}
void freeWord(sw *wordStart){
ss* ptr=wordStart;
ss *tmp;
while(ptr!=NULL){
tmp=ptr->next;
free(ptr);
ptr=tmp;
}
}
最佳答案
在 createWordList
中,您有
while(ptr->letter!='\n'){
ptrWord=(sw*)malloc(sizeof(sw));
while(ptr->letter!=32) {
ptrWord->word[i]=ptr->letter;
ptr=ptr->next;
i++;
}
然后
ptrWord->next=NULL;
if(wordStart==NULL){
wordStart=ptrWord;
endWord=wordStart;
} else {
appendWord(endWord,wordStart);
}
您没有使用 appendWord
的返回值,并且附加了 wordStart
而不是 ptrWord
- 也许您的意思是
endWord = appendWord(endWord, ptrWord);
一旦您点击空格字符,您就会停止更新ptr
,因为该更新位于内部
while (ptr->letter!=32) {
已编辑
添加了在空格字符后不更新 ptr
的问题。
“每个单词都以 '\n' 开头,因为您不会跳过它。”这是我的一个错误,我将其删除。
关于c - 我在链接列表方面遇到困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58897378/
tuple :: (Integer a,Fractional b) => (a,b,String) tuple = (18,5.55,"Charana") 所以这是给我的错误 ‘Integer’ is
关闭。这个问题是off-topic .它目前不接受答案。 想改进这个问题吗? Update the question所以它是on-topic用于堆栈溢出。 关闭 11 年前。 Improve thi
我已经习惯了python和django,但我最近开始学习java。由于工作原因我没有太多时间,所以错过了很多类(class),现在我有点困惑,我必须做作业。 编辑 该程序应该根据每个运动员在自行车和比
这是一个困难的问题,但对专业人士来说很容易。 我在 mysql 中有以下字段:产品名称、mycost、sellprice 和 stock。因为我需要知道每种产品对我的商店的投资有多少,所以我创建了以下
我有 3 个表,其中已包含以下行: TBL_TESTER_LIST id tester_type tester_name 1 LMX LMX-01 2 LMX
我想只使用 GridBagLayout 来布局组件,如图所示。 我已经尝试了几个约束,但它永远不会以预期的结果结束,所以我想知道仅使用 GridBagLayout 是否真的可行。难点在于C1、C2、C
我遇到了以下代码没有结果的问题。但是,如果我取消注释掉指定的行,并注释掉它起作用的 bind_param 行,但这不是破坏了 mysqli 的目的吗?我的 var_dump 给了我的字符串(1)“1”
这个问题在这里已经有了答案: a good python to exe compiler? [closed] (3 个答案) 关闭 9 年前。 有了我之前问题的一些有用答案(见下文),我决定再试一次
我正在使用 Hadoop 分析 GSOD 数据 (ftp://ftp.ncdc.noaa.gov/pub/data/gsod/)。我选择了 5 年来执行我的实验 (2005 - 2009)。我配置了一
我在我的 macOS 应用程序的设置面板中使用 NSGridView。我是这样设置的: class GeneralViewController: RootViewController { pr
我正在尝试使用以下代码在 PHP 中自动安装 WordPress 发行版: $base_dir = '/home/username/wordpress_location'; chdir($base_d
在 Node.js 中将图像转换为 Base64 字符串时,我遇到了一个非常令人困惑的问题 这是我的示例代码: app.get('/image', (req, res) => { ServerAP
我在尝试运行我的应用程序时遇到一些错误,这里是 logcat java.lang.RuntimeException: Unable to instantiate activity Componen
基本上,我正在努力创建一个管理团队和球员的 Java 程序。 根据我的理解,我会有一个团队和一个玩家类。在团队类中会有 get 和 set 方法,以及某种形式的集合来正确存储球员,例如数组列表?然后在
我仍在尝试找出 JavaSwing 中的 BorderLayout,这真的很令人沮丧。 我希望能够将一个 Pane 拆分为 3 个包含的子面板,但我不完全确定如何包含它。 这是我的游戏类,它包含面板
下面的表设计(完整的模式见下文)还有很多需要改进的地方,并且已经造成了许多困难,但是我无法找出如何最好地将它们规范化。这些表格的目的是: ICD9-提供CICD9和CDESC组合的主查找。每个组合在I
这是我的表格: AB元组表 C 表,其中包含 A.id 和 B.id 的条目 D 表,其中包含带有 C.id 的条目和一个 bool 字段“open” 我想计算 D 表中“open”= true 且具
我在 YouTube 上跟踪了一个相当旧的教程,在视频中他以这种方式使用了 mysql_result: return (mysql_result($result,0) == 1) ? true : f
我正在尝试创建一个左侧面板的页面。该面板有一个页眉、一个内容区域和一个页脚。主面板包装器 div 应该是页面高度的 100%。页眉和页脚没有指定的高度,因为我只希望它们足够大以容纳其文本和填充,而我希
我有 TreeView ,我想在其中显示用户通过 file_dialog.getOpenFileNames() 选择的文件; file_dialog 是 QFileDialog。我确实创建了模型类:
我是一名优秀的程序员,十分优秀!