zoukankan      html  css  js  c++  java
  • 高级语言课程设计报告第一次报告:链表

    高级语言课程设计报告

    序号

    31

    姓名

    许恺

    成绩

     

    学号

    2014011329

    E-MAIL及电话

    392282363@qq.com  

    18810556775

    实习题目

    第一次报告: 链表

    评阅意见:

     

     

     

     

     

     

     

                                                           评阅人:

                                                           2015年  月  日

     

    1. 你的代码、注释及运行结果贴图。

    #include <stdio.h>

    #include <stdlib.h>

    struct link *appendnode(struct link *head);

    struct link *insertnode(struct link *head);

    struct link *deletenode(struct link *head);

    struct link *specialfunction(struct link *head);//指删除奇数节点

    void displynode(struct link *head);

    void deletememory(struct link *head);

    void caidan();

    struct link

    {

    int data;

    struct link *next;

    };

    int main()

    {

    int i=0,a;

    char c;

    struct link *head=NULL;

    do

    {

    caidan();

    scanf("%d",&a);

    switch(a)

    {

    case 1:{head=appendnode(head);    break;}

    case 2:{head=insertnode(head);    break;}

    case 3:{head=deletenode(head);    break;}

    case 4:{displynode(head);    break;}

    case 5:{head=specialfunction(head);    break;}

    case 0:{printf("谢谢使用 ");    deletememory(head);    exit(0);}

    }

    }while(1);

    deletememory(head);

    return 0;

    }

    struct link *appendnode(struct link *head) //添加节点

    {

    struct link *p=NULL,*pr=head;

    int data;

    p=(struct link *)malloc(sizeof(struct link));

    if(p==NULL) //健壮性

    {

    printf("no enough memory to allocate! ");

    exit(0);

    }

    if(head==NULL) // 检查是否为空链表

    {

    head=p;

    p->next=NULL;

    }

    else

    {

    while(pr->next!=NULL)

    pr=pr->next;

    pr->next=p;

    p->next=NULL;

    }

    printf("please input the data. ");

    scanf("%d",&data);

    p->data=data;

    displynode(head);

    return head;

    }

    void displynode(struct link *head) //展示链表信息  

    {

    struct link *p=head;

    int i=1;

    printf("  节点数     节点数据 " );

    while(p!=NULL)

    {

    printf("%5d%10d ",i,p->data);

    p=p->next;

    i++;

    }

    }

    struct link *insertnode(struct link *head) //插入 节点

    {

    struct link *p=NULL,*pr=head;

    int b,i,data;

    p=(struct link *)malloc(sizeof(struct link));

    if(p==NULL)    //健壮性

    {

    printf("没有足够内存申请新节点 ");

    return head;          

    }

    if(head==NULL)

    {

    head=p;

    p->next=NULL;

    }

    else

    {

    printf("请输入您要在第几个节点后插入 ");

    scanf("%d",&b);

    i=0;

    if(b==0)

    {

        p->next=head;

        head=p;

    }

    else

    {

    while(b-1)

    {

    pr=pr->next;

    b--;

    if(pr==NULL&&b!=0)   

    {

    printf("输入数据超出节点数量 ");

    return head;

    }

    }

    p->next=pr->next;

    pr->next=p;

    }

    }

    printf("please input the data. ");

    scanf("%d",&data);

    p->data=data;

    displynode(head);

    return head;

    }

    struct link *deletenode(struct link *head) //删除节点函数

    {

    struct link *pr=head,*p=head;

    int b,i;

    if(head==NULL)    //健壮性

    {

    printf("此链表为空 ");

    return head;

    }

    do

    {

    i=0;

    printf("请输入要删除第几个节点,输入0取消删除 ");

    scanf("%d",&b);

    if(b==0)   return head;

    if(b==1)   

    {

    head=pr->next;

    free(pr);

    displynode(head);

    return head;

    }

    else

    {

    while(b-2)

    {

    pr=pr->next;

    p=p->next;

    b--;

    if(pr==NULL&&b!=0) //健壮性,防止输入超限

    {

    printf("输入数据超出节点数量 ");

    return head;

    }

    }

    }

    }while(i);

    if(pr->next==NULL||b==1)

    {

    pr=NULL;

    free(pr);

    }

    else

    {

    p=p->next;

    pr->next=p->next;

    free(p);

    }

    displynode(head);

    return head;

    }

    void deletememory(struct link *head) //删除记忆

    {

    struct link *p=head,*pr=NULL;

    while(p!=NULL)

    {

    pr=p;

    p=p->next;

    free(pr);

    }

    }

    void caidan() //菜单函数,方便使用

    {

    printf("                       链表机器人 ");

    printf("                      1.添加节点 ");

    printf(" 2.插入节点 ");

    printf(" 3.删除节点 ");

    printf(" 4.链表显示 ");

    printf("                                5.删除节点数据为奇数的节点 ");

    printf(" 0.退出程序 ");

    }

    struct link *specialfunction(struct link *head) //删除奇数节点

    {

    struct link *p=head,*pr=head;

    int data;

    if(head==NULL)

    {

    printf("Linked Table is empty! ");

    return head;

    }

    while(p!=NULL)

    {

    if(p->data%2!=0)

    {

    if(p==head)

    {

    head=p->next;

    }

    else

    {

    pr->next=p->next;

    }

    free(p);

    p=pr->next;

    }

    else

    {

    pr=p;

    p=p->next;

    }

    }

    /*while(pr!=NULL)

    {

    if((pr->data)%2!=0) 失败之作仅供批判

    {

    if(pr==head)   

    {

    head=pr->next;

    free(pr);

    pr=head;

    p=head;

    }

    else

    {

    if(pr->next==NULL)

    {

    pr=NULL;

    p=NULL;

    free(pr);

    }

    else

    {

    while(p->next->data%2==0)

    {

    p=p->next;

    }

    p->next=pr->next;

    free(pr);

    p=head;

    pr=pr->next;

    }

    }

    }

    else

    {

    pr=pr->next;

    }

    }*/

    displynode(head);

    return head;

    }

    1. 设计及调试过程遇到的问题及解决方案。

        各种不会,因为一个return 没有返回到head 上费了老师和我半天劲,还自己瞎写,在自己瞎写的过程中写了许多匪夷所思的代码,完全自创,忘记了C语言的模版性。没有完全理解free(p);的含义,经老师指点,明白只是把空间释放,指针还在那不动。在最前面插入节点时出现错误,进行了更改,把复杂的防超限代码简化。

    1. 心得体会和自我对程序的评价。

        开始他们照书上抄代码,本来我是拒绝的,抄了以后还得自己改编加些特技,本来我是拒绝的,后来前面都是我自己写的代码直到删除奇数节点的部分,duang我就蒙了,很无奈问了老师,抄了书。果然没技术不能太任性,感觉这个程序我对我自己不太满意,对链表还不太熟悉,还不能熟练应用,继续努力。在自以为完成后又被老师发现错误,我不是一个好的程序员,相当于做出软件出了bug,太耻辱了,功能并不完善,报告做的太久了,下次加快速度。唯一值得欣慰的是代码编出来没有什么低级错误,改了两处分号的错误就编译出来了。首先我需要有技术,才能放飞想象力,去开发我想要的东西。首先我要有技术!!还有细心!!!

  • 相关阅读:
    (五)《Java编程思想》——final关键字
    eclipse与github建立版本关联、git使用说明
    (四)《Java编程思想》——可变参数列表
    (三)《Java编程思想》——构造函数初始化
    (二)《Java编程思想》——t h i s 关键字
    (一)《Java编程思想》学习——按位运算符、移位运算符
    (三)一个工作任务引起的乱战——udp通信
    (二)一个工作任务引起的乱战——C++程序编译为dll,让C#调用
    (一)一个工作任务引起的乱战——c#中结构体与byte[]间相互转换
    如何反编译silverlight
  • 原文地址:https://www.cnblogs.com/xukaiae86/p/6415883.html
Copyright © 2011-2022 走看看