软件基础实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件基础实验报告
————————————————————————————————作者:————————————————————————————————日期:
计算机软件技术基础
实验报告
姓名:XXX
班级:XX 0X01
学号:30X05050XX
实验一
线性表:
1、建立单向链表,表长任意;
2、可交互输出单链表中的内容;
3、编写算法计算出自己所建单链表的长度并输出;
4、删除自己所建单链表中的第K个结点,并将剩余结点输出;
5、将单链表倒排,输出结果。
源程序如下:
#include
#include<malloc.h>
typedef int datatype;
typedefstruct node//链表结构体//
{
datatypedata;
structnode*next;
}linklist;
linklist*creatlist() //建立链表//
{
intx;
linklist*head, *s;
head=NULL;
printf("\n 输入链表数据:");
scanf("%d",&x);
while(x!=0)
{
s=malloc(sizeof(linklist)); //为链表开辟一系列的空间//s->data=x;
s->next=head;
head=s;
printf("\n输入链表数据:");
scanf("%d",&x);
}
returnhead;
}
void listContent(linklist*h)//输出链表内容//
{
linklist *s;
s=h;
while(s!=NULL)
{
printf("%4d",s->data);
s=s->next;
}
}
intlistLong(linklist*h)//计算链表长度// {
inti=0;
linklist *s;
s=h;
while(s!=NULL)
{
i++;
s=s->next;
}
return(i);
}
voidDeleteNode(linklist *h,intk)//删除第K个节点// {
int i=0;
linklist*p,*q;
p=h;
if(k==1)
{
h=h->next;
free(p);
}
else
{
while(i<k-1&&p!=NULL)
{
i++;
q=p;
p=p->next;
}
q->next=p->next;
free(p);
}
}
linklist *DaoXu(linklist *h)//逆序排列链表//
{
linklist *r,*q,*p;
r=h;
p=r->next;
q=p->next;
if(h==NULL)
printf("链表为空\n");
while(q!=NULL&&h!=NULL)
{
p->next=r;
r=p;
p=q;
q=q->next;
}
h->next=NULL;
p->next=r;
return(p);
}
main()
{
intk,x;
linklist*h;
do
{
printf("\n功能:\n");
printf("1.建立链表\n");
printf("2.输出链表内容;\n");
printf("3.获得链表长度\n");
printf("4.删除第K个节点\n");
printf("5.将链表倒序输出\n");
printf("6.退出\n");
printf("请输入功能号:\n");
scanf("%d",&x);
if(x<1||x>6)
printf("错误!\n");
else
switch(x)
{
case1:h=creatlist();break;
case2:listLong(h);break;
case 3:printf("链表的长度是:%d",listLong(h));break;
case 4:printf("请输入要删除的节点:\n");
ﻩscanf("%d",&k);
ﻩDeleteNode(h,k);
listContent(h);break;
case5:h=DaoXu(h);
listContent(h);break;
case 6:exit(0);break;
}
}
while(1);
}
运行结果:
实验总结:1.在编写倒排链表的程序时,对于循环的计数的控制没有搞好,以致无法得到想要的链表;2.要给一个指针创立空间之后才能调用它,否则会出错。
解决办法:1.通过单步调试程序,调整循环次数,来使循环中的个参数达到自己想要的通过查阅资料,完成对链表程序的实现。在写每一个子函数时,常常会遗漏小的判断条件,比如遗漏了判断是否为空等;还有就是在对指针操作时,有时多加了*,或者分号