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] = ;
    p->exp[0] = ;
    return p;
}


int main
{
    int a,i=0;
    wchain root;//创建根
    root.word[0] = a;
   strcpy(root.exp,"1");
    //creatChild(&root);
    root.pt = NULL;
    char c;
    char str[30];
    char exp[200];
    while (i < 4)
    {
        printf("please input;");
        scanf("%s",str);
        scanf("%s",exp);
        printf("
%sE
",str);
        printf("%sE
",exp);
        searchInsert(&root,str,exp);
        i++;
    }
    chPrint(&root);

    //exchange(str);
    // checkAndInsert(&root,str);
    printf("a = %s,b = %s 
",root.word[2],exp);


}

void chPrint(wchain *pt)
{
    while(1)
    {
        if(strlen(pt->word) == 0)
        {
            printf("null
");
        } else
        {
            printf("%s %s
",pt->word,pt->exp);
        }
        pt = pt->pt;
        if (pt == NULL)
            break;
        else
        continue;
    }


}

///单词树,先舍弃,用链表
//
//int checkAndInsert(wtree *pfa,char str[])
//{
//    int i = 0;
//    int len = strlen(str) - 1;
//    if(pfa->childTree[i] != false)
//    {
//        if (str[len] = pfa->c)
//        {
//             str[len] == ‘‘;
//             return checkAndInsert(pfa->childTree[i],str);
//        } else if (strcmp(str[len],pfa->c) < 0)
//        {
//
//        }
//
//
//    }else if (pfa->childTree[i] == false)
//    {
//        pfa->childTree[i] = creaTree();
//        wtree *px = pfa->childTree[i];
//        px->c = str[len];
//    }
//
//
//
//
//
//}
//
//int creaTree()
//{
//    return 0;
//}
//
//int exchange(char str[])
//{
//    int left = 0;
//    int right = strlen(str) - 1;
//    char temp;
//    while(1)
//    {
//        if ( left <= right)
//        {
//            temp = str[left];
//            str[left++] = str[right] ;
//            str[right--] = temp;
//        }
//        else
//        {
//            break;
//        }
//    }
//
//}
//
//
//typedef struct Books
//{
//   char  title[50];
//   char  author[50];
//   char  subject[100];
//   int   book_id;
//};
//
///* 函数声明 */
//void printBook( struct Books book );
//int main( )
//{
//   struct Books Book1;        /* 声明 Book1,类型为 Books */
//   struct Books Book2;        /* 声明 Book2,类型为 Books */
//
//   /* Book1 详述 */
//   strcpy( Book1.title, "C Programming");
//   strcpy( Book1.author, "Nuha Ali");
//   strcpy( Book1.subject, "C Programming Tutorial");
//   Book1.book_id = 6495407;
//
//   /* Book2 详述 */
//   strcpy( Book2.title, "Telecom Billing");
//   strcpy( Book2.author, "Zara Ali");
//   strcpy( Book2.subject, "Telecom Billing Tutorial");
//   Book2.book_id = 6495700;
//
//   /* 输出 Book1 信息 */
//   printBook( Book1 );
//
//   /* 输出 Book2 信息 */
//   printBook( Book2 );
//
//   return 0;
//}
//void printBook( struct Books book )
//{
//   printf( "Book title : %s
", book.title);
//   printf( "Book author : %s
", book.author);
//   printf( "Book subject : %s
", book.subject);
//   printf( "Book book_id : %d
", book.book_id);
//}
//
//
//
//
//
//
//
//
//
//
//
//
////char comandOption[4000] = {"*                    .::::. 
*                  .::::::::. 
*                 :::::::::::  FUCK YOU 
*             ..:::::::::::‘ 
*           ‘:::::::::::‘ 
*             .:::::::::: 
*        ‘::::::::::::::.. 
*             ..::::::::::::. 
*           ``:::::::::::::::: 
*            ::::``:::::::::‘        .:::. 
*           ::::‘   ‘:::::‘       .::::::::. 
*         .::::‘      ::::     .:::::::‘::::. 
*        .:::‘       :::::  .:::::::::‘ ‘:::::. 
*       .::‘        :::::.:::::::::‘      ‘:::::. 
*      .::‘         ::::::::::::::‘         ``::::. 
*  ...:::           ::::::::::::‘              ``::.
* ```` ‘:.          ‘:::::::::‘                  ::::..
*                    ‘.:::::‘                    ‘:‘````.."};
//
//int main()
//{
//    int i;int c;
////    for (i = 0;i < 4000; i++)
////    {
////        c =getchar();
////        comandOption[i] = c;
////        if (c == ‘o‘)
////        {
////
////            comandOption[i] = ‘‘;
////            i = 4000;
////        }
////
////    }
//    for (i = 0; i < strlen(comandOption);i++)
//    {
//        if (comandOption[i] == ‘
‘)
//        {
//            printf("
");
//        } else if (comandOption[i] == ‘‘)
//        {
//           i = 4000;
//
//        } else
//        {
//            printf("%c",comandOption[i]);
//        }
//    }
//    Sleep(100);
//   // p=fopen("e:\\a.txt","w");
//    scanf("%c",&i);
//    scanf("%c",&i);
//    scanf("%c",&i);
//    return 0;
//}
//

//int getOption(char str[])
//{
//    int c;
//    int i = 0;
//    EnterAndCheck;
//    if ( c != ‘-‘ && c != ‘f‘)
//    {
//        clean_Print("Wrong argument
Enter to continue....
");
//    } else if ( (c = getchar()) == ‘=‘) //route
//    {
//        c = getchar();
//        while(1)
//        {
//            if (c == ‘
‘ || c == EOF || c == ‘ ‘)
//            {
//                str[i++] = ‘‘;
//                return 0;
//            }
//            else if (isalpha(c) || c == ‘:‘ || c == ‘\\‘ || c == ‘/‘ || c == ‘.‘ || c == ‘\\_‘ || isdigit(c))
//            {
//                str[i++] = c;
//                c = getchar();
//                continue;
//            }
//            else
//            {
//                str[0] = ‘‘;
//                clean_Print("Illegal file names
Enter to continue...
");
//                return -1;
//            }
//        }
//    } else if ( isdigit(c) )
//    {
//
//            if (isdigit(c))
//            {
//                str[i++] = c;
//                c = getchar();
//                if (isdigit(c))
//                {
//                    str[i++] = c;
//                    if (isdigit(c = getchar()))
//                    {
//                        str[0] = ‘‘;
//                        clean_Print("Time must be within 1-99.
");
//                        return -1;
//                    }else
//                    {
//                        str[i] = ‘‘;
//                        return 0;
//                    }
//                } else if (c == ‘
‘ || c == ‘ ‘ )
//                {
//                    str[i] = ‘‘;
//                    return 0;
//                }else
//                {
//                    str[0] = ‘‘;
//                    clean_Print("Wrong argument
Enter to continue....
");
//                    return -1;
//                }
//
//            }
//    }else
//    {
//        printf("%c",c);
//        clean_Print("Wrong argument
Enter to continue....
");
//    }
//}
//
//
//void clean_Print( const char *str ) /* 清空缓存函数*/
//{
//    int ch;
//    printf( "%s", str );
//    while ( (ch = getchar() != ‘
‘) && ch != EOF )
//        ;
//}



//
//路径 中反斜杠 用 双斜杠书写。用 sprintf 构成 文件全路径。
//程序例子如下。
//#include<stdio.h>
//int main( )
//{
//FILE *fp;
//char path1[80]="E:\\Users\\Wang";    //主路径
//char sub_path[40]="P1\\text\\win_ver.txt";   //子路径和文件名
//char f_name[120];    //文件全路径
//sprintf(f_name,"%s\\%s",path1,sub_path);   //构成文件全路径
//printf("I will open %s
",f_name);
//fp=fopen(f_name,"r");    //打开文件
//if (!fp) {printf("Can not opne %s
",f_name);exit(0);};
//printf("Good !
");
//fclose(fp);   //关闭文件
//return 0;
//}

 

 

 

以上是关于12月21 链表初体验的主要内容,如果未能解决你的问题,请参考以下文章

数据结构线性表初接触1:线性表的顺序存储结构下基本运算的实现

2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛 赛道B 北京移动用户体验影响因素研究 问题二建模方案及代码实现详解

2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛 赛道B 北京移动用户体验影响因素研究 问题二建模方案及代码实现详解

2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛 赛道B 北京移动用户体验影响因素研究 问题一建模方案及代码实现详解

2022年第三届MathorCup高校数学建模挑战赛——大数据竞赛 赛道B 北京移动用户体验影响因素研究 问题一建模方案及代码实现详解

21个常用代码片段