12月21 链表初体验
Posted dosu
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了12月21 链表初体验相关的知识,希望对你有一定的参考价值。
要考试了,但是,忍不住想写代码,哪怕不复习要挂科。。。本末倒置了
本来想写一个树,但是,思路有点乱,就像先写一个链表,考完试再说,对于链表,我都是自己看书的,由于前一张结构体理解不够深,踩了好多坑。
所以,学习还是要一步一步,沉心静气来呐。
又看了好些结构体,树的东西,然后,不断试错,调试了一下午,才写出这么一个东西。真好菜,但是我也很崩溃呐,一大半时间程序是崩溃的。
我试着用gdb,但是,gdb深入使用我也不会呐,实在看不出什么名堂。只能一点一点重新顺着看代码。捋。在每一步操作前添加输出,打印变量值,打印当前在哪一步,然后,两个小时以后,好吧,我头疼,睡了一会。
我得出了现在的这个程序。刚开始测试的时候,一直报错 error: expected ‘=‘, ‘,‘, ‘;‘, ‘asm‘ or ‘__attribute__‘ before ‘{‘ token| 我找了半天实在找不出问题所在,花了巨量时间,我怀疑是结构体操作错了,所以这一步让我对结构体操作,深深的迷惑了 最后,发现是 漏了 主函数的括号。[捂脸][痛哭]
还有一个奇怪的报错,
也是找了相当长时间。所以,建议你们在做一个有好几个新内容 的东西的时候,把他们分开实验,不然,你会混乱的怀疑每一个操作,最后发现是没有提前声明函数,这是个使用哦个codeblocks惯出来的坏习惯。
codeblocks平时使用未声明函数根部不会报错,并正常运行,最后头疼,逼不得已,问了 小马哥,小马哥问。你声明了么。main前,我说,没有,应该不影响那,然后,打脸了。
所以,写程序,一定要规范,所有硬性规定的规范任何时候都要遵守,哪怕他现在看来,十分不起眼并没有任何影响。
最后,程序总算成功编译了,运行时出问题了,输入数据后闪退。又一翻查找。。。。。。。。。。。
最后,我在指针操作前,将指针变量输出,发现,00000008 这个肯定不正常,所以,指针,空指针,请一定将他 赋 为 NULL 。并且,操作前,请检查是否为NULL。
。。。。。又过了一小时其他小小问题后,有了下面这个混乱的程序。。。。大家好,我是渣渣C 。和之前的一些测试代码混在一起了,没有整理,稍后要整理的,到时候想起来再发,现在,我要将这个不太健壮的程序修补修补,测试一下,封到我的一个单词排版系统里面。
#include <stdio.h> #include <stdlib.h> #include <dos.h> #include <stdbool.h> #include <string.h> #include <windows.h> #define EnterAndCheck while ( ( (c = getchar() ) == ‘ ‘) && c != ‘ ‘ ) int sameCounter ; //单词树结构体 //typedef struct wtree //{ // char c; // char e[200]; // bool treeflag[26]; // struct word *childTree[26]; //} wtree; //跟节点 typedef struct wchain { char word[100]; char exp[200]; struct wchain *pt; } wchain; //struct wtree defdata = {‘ ‘,‘ ‘,‘0‘,NULL}; struct wchain * creatChild(wchain *ptran); int searchInsert(wchain* ptran,char str[],char exp[]) { if (ptran == NULL) { printf("error,null pointer! "); return 0; } else if (strlen(ptran->word) == 0) { strcpy(ptran->word,str); if (strlen(exp) != 0) { strcpy(ptran->exp,exp); } return 1; }else if (strcmp(ptran->word,str) == 0) //单词已经存在 { printf("The word already exists! "); sameCounter++; strcpy(ptran->exp,exp); //更新释义 return 0; }else if (strcmp(ptran->word,str) < 0) //a < b ,继续比较下一个 { if (ptran->pt == NULL) { ptran->pt = creatChild(ptran->pt); wchain *temp = ptran->pt; strcpy(temp->word,str); strcpy(temp->exp,exp); return 1; } else { return searchInsert(ptran->pt,str,exp); } } else if (strcmp(ptran->word,str) > 0) { wchain *tempnow = ptran->pt; ptran->pt = creatChild(ptran->pt); *(ptran->pt) = *ptran; ptran->pt->pt = tempnow; strcpy(ptran->word,str); strcpy(ptran->exp,exp); return 1; } } struct wchain * creatChild(wchain *ptran) { wchain *p; p = (wchain*) malloc(sizeof(wchain)); if (p == NULL) { printf("NO enough memory! "); return -1; } if (p != NULL) printf("old %p new %p",ptran,p->pt); p->pt = ptran; p->word[0] = ‘