高级语言课程设计报告第一次报告:链表

简介: 高级语言课程设计报告序号31姓名许恺成绩 学号2014011329E-MAIL及电话392282363@qq.com  18810556775实习题目第一次报告: 链表评阅意见:       ...

高级语言课程设计报告

序号

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("谢谢使用\n");    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!\n");

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.\n");

scanf("%d",&data);

p->data=data;

displynode(head);

return head;

}

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

{

struct link *p=head;

int i=1;

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

while(p!=NULL)

{

printf("%5d%10d\n",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("没有足够内存申请新节点\n");

return head;          

}

if(head==NULL)

{

head=p;

p->next=NULL;

}

else

{

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

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("输入数据超出节点数量\n");

return head;

}

}

p->next=pr->next;

pr->next=p;

}

}

printf("please input the data.\n");

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("此链表为空\n");

return head;

}

do

{

i=0;

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

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("输入数据超出节点数量\n");

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("                       链表机器人\n");

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

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

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

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

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

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

}

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

{

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

int data;

if(head==NULL)

{

printf("Linked Table is empty!\n");

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,太耻辱了,功能并不完善,报告做的太久了,下次加快速度。唯一值得欣慰的是代码编出来没有什么低级错误,改了两处分号的错误就编译出来了。首先我需要有技术,才能放飞想象力,去开发我想要的东西。首先我要有技术!!还有细心!!!

相关文章
|
5月前
|
监控 安全 数据可视化
冲刺阶段 - PMP易错概念(持续更新中)(三)
冲刺阶段 - PMP易错概念(持续更新中)(三)
15 0
|
5月前
|
数据采集 监控 数据挖掘
冲刺阶段 - PMP易错概念(持续更新中)(四)
冲刺阶段 - PMP易错概念(持续更新中)(四)
32 0
|
5月前
|
自然语言处理 监控 数据挖掘
冲刺阶段 - PMP易错概念(持续更新中)(二)
冲刺阶段 - PMP易错概念(持续更新中)(二)
34 0
|
5月前
|
监控 数据挖掘 项目管理
冲刺阶段 - PMP易错概念(持续更新中)(一)
冲刺阶段 - PMP易错概念(持续更新中)
37 0
|
10月前
|
数据库
第一遍阅读之《信息系统开发与管理》(二战)
第二次学习信息系统开发与管理,第一感觉是:必过! 信息系统开发与管理距离我们软件的具体开发很近,在我们生物专业学习过程中,有一门课程叫做《食品仪器分析》,其中有一章节的内容讲的大概是建立一个工厂的过程是怎么样的。这其中的方法和我们的《信息系统开发与管理》的内容有异曲同工之妙,我们要建立的是一个工厂,但是摆脱不了和周围事物的联系。
|
10月前
|
XML 安全 网络协议
网络安全专业术语对照
网络安全专业术语对照
116 1
|
C语言 C++
C语言最终测评错题(个人记录用)
C语言最终测评错题(个人记录用)
69 0
|
前端开发
实验:CSS+Div基础 - 预习报告
网页设计技术实验预习报告。
172 1
实验:CSS+Div基础 - 预习报告
|
容器
浙大版《数据结构学习与实验指导(第2版)》进阶实验8-2.2:特殊堆栈
浙大版《数据结构学习与实验指导(第2版)》进阶实验8-2.2:特殊堆栈
92 0
|
测试技术 UED
【软件测试基础理论】bug 怎么写?怎么跟踪?怎么分级?
【软件测试基础理论】bug 怎么写?怎么跟踪?怎么分级?

相关实验场景

更多