软基上机报告链表拓展题Word文档下载推荐.docx
《软基上机报告链表拓展题Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《软基上机报告链表拓展题Word文档下载推荐.docx(23页珍藏版)》请在冰豆网上搜索。
1)删除单链表中全部的负数(逐个判断是不是负数,并且返回负数所在位置,删除过春哥同实验一)
2)创建一个双向链表,按照冒泡排序的思路对这个双向链表进行排序,打印排序结果。
(从一开始逐个比较,将比第一位大的与第一位交换位置,一直比较到最后一位然后开始对于第二位重复比较)
二、程序代码
2_2
#include<
stdio.h>
malloc.h>
stdlib.h>
typedefstructNode{
intdata;
structNode*link;
}node;
typedefstructList{
node*head;
node*tail;
intlength;
}list;
voidcreat_list(list*table)
{
intx,i;
node*temp;
table->
head=NULL;
tail=NULL;
length=0;
x=1;
scanf("
%d"
&
x);
for(i=0;
x!
=0;
i++)
{
fflush(stdin);
printf("
\n"
);
temp=(node*)malloc(sizeof(node));
temp->
data=x;
link=NULL;
link=table->
head;
table->
head=temp;
length++;
}
}
node*create_node(intnew_node)
node*temp;
temp=(node*)malloc(sizeof(node));
temp->
data=new_node;
link=NULL;
returntemp;
voidget(list*table,intn)
inti,loc=table->
length+1;
node*newnode;
temp=table->
newnode=create_node(n);
for(i=2;
i<
loc;
{
temp=temp->
link;
newnode->
link=temp->
link=newnode;
voidshow_list(list*table)
printf("
链表为:
for(i=1;
i<
=table->
length;
x=temp->
data;
%d"
x);
voiddelete_node(list*table,intn)
inti;
node*temp,*t;
if(n==1)
if(n>
2&
&
n<
table->
length)
temp=table->
for(i=2;
n;
t=temp->
link=t->
if(n==table->
{for(i=2;
temp=temp->
if(n==2)
t=temp->
length--;
voidsearch(list*table,intx,inta[2])
inti=0,j=0;
=table->
if(x==temp->
data)
{a[1]=i;
j++;
}
if(j==0)
{a[0]=0;
a[1]=0;
else
a[0]=1;
voidmain()
listtable;
intm,a[2];
creat_list(&
table);
show_list(&
\n输入一个整数\n"
scanf("
m);
search(&
table,m,a);
if(a[0]==1)
delete_node(&
table,a[1]);
show_list(&
else{
get(&
table,m);
2_2(3)
inti,m=0;
if(n<
newnode->
link=temp;
temp=newnode;
else
for(i=1;
m==0;
if(i<
length&
n&
=temp->
{
m=1;
}
elseif(i==table->
{temp->
link=newnode;
m=1;
2_3
(1)
scanf("
\n链表为:
voidsearch(list*table,inta[2])
if(temp->
0)
j=1;
break;
{a[0]=1;
voidpaixu(list*table)
{inti,j,m,u;
node*temp,*t,*p;
{temp=table->
for(u=1;
u<
i;
u++)
t=temp;
for(j=i;
j<
j++)
temp=t;
for(m=i;
m<
=j;
m++)
temp=temp->
if(t->
(temp->
data))
p=temp->
temp->
t->
link=p;
table,a);
for(m=1;
a[0]==1;
search(&
2_3
(2)
structNode*link,*last;
t=(node*)malloc(sizeof(node));
t=table->
t->
last=NULL;
p=t;
t=t->
t->
last=p;
inti,j,m;
node*temp,*t,*p,*q;
if(t->
data>
p=t->
t->
link=temp->
temp->
last->
table->
head=t;
last=t->
last;
p=t;
t=temp;
/**/
t=temp;
for(j=i+1;
t=t->
link=t;
last=temp->
paixu(&
三、测试数据*
输入:
1
3
2
-4
5
-2
9
-7
输入一个整数
10
7
4
123457
6
应输出(上机前自己分析的结果):
79-25-4231
-79-25-421
-79-25-42110
1234567
59-7-43-21
5931
9531-2-4-7
四、上机时遇到的问题(可分为编译问题和逻辑问题)*
①问题现象:
冒泡排序时出现错误原因:
循环次数出现问题,少套一个循环;
解决办法:
加一个循环
②问题现象:
删除负数时删错元素原因:
对于提供的删除元素位置处理不得当;
通过调试中找到正确处理方法
五、实际运行结果:
六、小结体会*:
整体做起来比较困难,需要加强对于链表的练习。
同时,思考对于2_2,若原链表中有多个需要处理的元素如何一并处理。