软基上机报告-链表(基础题).doc
《软基上机报告-链表(基础题).doc》由会员分享,可在线阅读,更多相关《软基上机报告-链表(基础题).doc(5页珍藏版)》请在冰点文库上搜索。
ex2_1——基本题
1)首先创建一个单链表:
从键盘读入五个整数,按输入顺序形成单链表。
将创建好的链表元素依次输出到屏幕上。
2)在已创建好的链表中插入一个元素:
从键盘读入元素值和插入位置,调用插入函数完成插入操作。
然后将链表元素依次输出到屏幕上。
3)在已创建好的链表中删除一个元素:
从键盘读入欲删除的元素位置(序号),调用删除函数完成删除操作。
然后将链表元素依次输出到屏幕上。
一、程序流程说明
1)创建一个单链表:
从键盘读入五个整数,按输入顺序形成单链表。
将创建好的链表元素依次输出到屏幕上。
2)在已创建好的链表中插入一个元素:
从键盘读入元素值和插入位置,调用插入函数完成插入操作。
然后将链表元素依次输出到屏幕上。
(让插入位前一位的指针指向新增结点,新增结点指针指向插入位置原结点,同时length加一)
3)在已创建好的链表中删除一个元素:
从键盘读入欲删除的元素位置(序号),调用删除函数完成删除操作。
然后将链表元素依次输出到屏幕上。
(让插入位置前一结点指针指向下一结点,length减一,其余不变)
二、程序代码
#include
#include
#include
typedefstructNode{
intdata;
structNode*link;
}node;
typedefstructList{
node*head;
node*tail;
intlength;
}list;
voidcreat_list(list*table)
{
intx,i;
node*temp;
table->head=NULL;
table->tail=NULL;
for(i=5;i>=1;i--)
{
printf("请输入第%d个元素:
",i);
fflush(stdin);
scanf("%d",&x);
printf("\n");
temp=(node*)malloc(sizeof(node));
temp->data=x;
temp->link=NULL;
temp->link=table->head;
table->head=temp;
}
table->length=5;
}
node*create_node(intnew_node)
{
node*temp;
temp=(node*)malloc(sizeof(node));
temp->data=new_node;
temp->link=NULL;
returntemp;
}
voidget(list*table)
{
intloc,x,i;
node*temp;
node*newnode;
temp=table->head;
printf("\n请输入插入位置:
");
scanf("%d",&loc);
printf("请输入插入元素:
");
scanf("%d",&x);
if(loc>table->length||loc<=0)
printf("插入出现错误\n");
else
{
table->length++;
newnode=create_node(x);
if(loc>=3&&loc<=5)
{
for(i=2;i {
temp=temp->link;
}
newnode->link=temp->link;
temp->link=newnode;
}
if(loc==1)
{
newnode->link=table->head;
table->head=newnode;
}
if(loc==2)
{
temp=table->head;
newnode->link=temp->link;
temp->link=newnode;
}
}
}
voidshow_list(list*table)
{
intx,i;
node*temp;
printf("链表为:
\n");
temp=table->head;
for(i=1;i<=table->length;i++)
{
x=temp->data;
printf("%d",x);
temp=temp->link;
}
}
voiddelete_node(list*table)
{
intloc,i;
node*temp,*t;
temp=table->head;
printf("\n请输入删除位置");
scanf("%d",&loc);
if(loc<=0||loc>table->length)
printf("删除出错");
elsetable->length--;
if(loc==1)
{
temp=temp->link;
table->head=temp;
}
if(loc>2&&loclength)
{
temp=table->head;
for(i=2;i temp=temp->link;
t=temp->link;
temp->link=t->link;
}
if(loc==table->length)
{ for(i=2;i temp=temp->link;
temp->link=NULL;
}
if(loc==2)
{
temp=table->head;
t=temp->link;
temp->link=t->link;
}
}
voidmain()
{
listtable;
creat_list(&table);
show_list(&table);
get(&table);
show_list(&table);
delete_node(&table);
show_list(&table);
}
三、测试数据*
输入:
请输入第5个元素:
23
请输入第4个元素:
6
请输入第3个元素:
1
请输入第2个元素:
0
请输入第1个元素:
45
请输入插入位置:
3
请输入插入元素:
12
请输入删除位置1
应输出(上机前自己分析的结果):
链表为:
4501623
链表为:
450121623
链表为:
0121623
四、上机时遇到的问题(可分为编译问题和逻辑问题)*
①问题现象:
运行超出范围原因:
i,j值选取出现问题;解决办法:
通过改变循环的值来实现正确解
②问题现象:
增加元素之后仍然只能输出五位值原因:
show_list函数输出五位,而非length位;解决办法:
改变show_list函数
五、实际运行结果:
链表为:
4501623
链表为:
450121623
链表为:
0121623
六、小结体会*:
可以改变一下让输入不只五位,同时可以考虑实现增加或删除多个元素。