西电机电院软件技术基础大作业Word格式文档下载.docx
《西电机电院软件技术基础大作业Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《西电机电院软件技术基础大作业Word格式文档下载.docx(21页珍藏版)》请在冰豆网上搜索。
若数据域是英文字母或是其它字符,则将其从原来的链表中删除,并把它分别插入到其它两个链表中。
4.建立一个循环链表,链表的数据域为商品的价格和数量,最后插入(4000,10)节点。
从前到后遍历这个链表,若链表中存在一个节点,其数据域的价格为4000,则数量再加上10即可,若不存在,按照链表的顺序将该节点插入。
5.建立一个顺序表,从键盘上输入字符串,从第一个节点和最后一个节点依次向中间比较。
若发现不同。
则比较结束,该字符串不是回文,否则,是回文。
6.叶子节点的左右孩子节点的数据域均为0.用先序遍历的方法遍历该链表,每遍历到一个节点,就将节点数加1,若节点的左右孩子节点的数据域为0,则叶子节点数加1.
四、调试分析
1.在调试过程中,要充分考虑到各种可能出现的情况。
比如说,当有多个最小值时,需要依次与其后的节点进行操作;
再如,到最小值在最后一个节点时,就不能进行任何处理了。
时间复杂度:
O(n)。
2.好像没有遇到什么问题。
3.此处要注意结束条件,否则可能没法正常退出。
4.本题需要注意,链表中是否有数据域为4000的节点,有的话就不用再新建了。
5.本题好像也没有遇到什么问题。
6.本题要注意,叶子节点的定义。
否则,程序无法判断节点是否为叶子节点。
五、测试结果
1.
2.
3.
4.
5.
6.
六、源程序:
#include<
stdio.h>
stdlib.h>
typedefintdatatype;
typedefstructnode
{
datatypedata;
structnode*next;
}linklist;
linklist*head,*p;
linklist*creatlistr1();
/*尾插法*/
voidDelete(linklist*p,linklist*head);
linklist*locate(linklist*head,datatypekey);
voidoutput(linklist*p);
intmain()
intMin;
linklist*pMin=(linklist*)malloc(sizeof(linklist));
printf("
请输入单链表,并以-1结束:
\n"
);
head=creatlistr1();
Min=head->
next->
data;
p=head->
next;
while(p!
=NULL)
{
if(Min>
p->
data)
{
Min=p->
pMin=p;
}
p=p->
}
最小值为:
%d\n"
Min);
p=head;
while((p=locate(p,Min))!
if(p->
next!
if(Min%2)
{
(p->
data)^=(p->
data)^=p->
}
else
Delete(p->
next,head);
}
变更后的链表为:
"
output(head);
return0;
}
linklist*creatlistr1()/*尾插法*/
intch;
linklist*head,*s,*r;
head=(linklist*)malloc(sizeof(linklist));
r=head;
scanf("
%d"
&
ch);
while(ch!
=-1)
s=(linklist*)malloc(sizeof(linklist));
s->
data=ch;
r->
next=s;
r=s;
scanf("
r->
next=NULL;
returnhead;
voidoutput(linklist*ll)
linklist*p;
for(p=ll->
p!
=NULL;
p=p->
next)
printf("
%d"
p->
data);
voidDelete(linklist*p,linklist*head)
linklist*q=head;
while(q->
=p)
q=q->
q->
next=p->
free(p);
linklist*locate(linklist*head,datatypekey)
linklist*p=head->
while(p!
data!
=key)
p=p->
elsebreak;
returnp;
linklist*head;
linklist*reverse1(linklist*head);
inti;
head=(linklist*)malloc(sizeof(linklist));
linklist*s,*r;
for(i=0;
i<
10;
i++)
s=(linklist*)malloc(sizeof(linklist));
data=i+1;
reverse1(head);
voidinsertafter(linklist*p,datatypex)
linklist*s;
s=(linklist*)malloc(sizeof(linklist));
s->
data=x;
p->
linklist*reverse1(linklist*head)
linklist*p,*q;
while(p->
q=p->
p->
next=q->
q->
next=head->
head->
next=q;
ctype.h>
linklist*head,*head2,*head3,*p,*p2,*p3;
linklist*Delete(linklist*p,linklist*head);
请输入链表,并以'
$'
结束:
head2=(linklist*)malloc(sizeof(linklist));
head2->
head3=(linklist*)malloc(sizeof(linklist));
head3->
p2=head2;
p3=head3;
if(isdigit(p->
data))
continue;
if(isalpha(p->
p2->
next=Delete(p,head);
p2=p2->
p3->
p3=p3->
output(head2);
output(head3);
charch;
ch=getchar();
='
)
ch=getchar();
%c"
linklist*Delete(linklist*p,linklist*head)
datatypeprice;
datatypemount;
voidinsert(linklist*head,datatypeprice,datatypemount);
voidoutput(linklist*head);
请按价格从高到低的次序依次输入电视机的价格和数量,格式:
“价格数量”,两组数据之间用空格分开,最后以“00”结束:
insert(head,4000,10);
%d%d"
price,&
mount);
while(!
(price==0&
&
mount==0))
price=price;
mount=mount;
next=head;
=head;
%d%d\n"
price,p->
voidinsert(linklist*head,datatypeprice,datatypemount)
linklist*s,*p=head->
next,*q=head;
s=(linklist*)malloc(sizeof(linklist));
=head,p->
price>
4000)
if(p->
price==4000)
mount+=10;
}
else
string.h>
#defineMaxnum1024
charstr[Maxnum]={0};
inti,j,flag=1;
%s"
str);
j=strlen(str)-1;
j;
i++,j--)
if(str[i]!
=str[j])
flag=0;
break;
if(flag)
是回文\n"
不是回文\n"
6.
typedefstructNode
structNode*lchild,*rchild;
}Node,*pNode;
intCreateTree(pNode&
T)
datatypee;
e);
if(e==0)T=NULL;
else
T=(pNode)malloc(sizeof(Node));
if(!
exit(-2);
T->
data=e;
CreateTree(T->
lchild);
rchild);
return1;
intCountNode(pNodeT)
intm=0,n=0;
if(T==NULL)
return0;
m=CountNode(T->
n=CountNode(T->
return(m+n+1);
voidleafcount(pNodep,int*count)
if(p==NULL)return;
if(p->
lchild==NULL&
rchild==NULL)
(*count)++;
return;
leafcount(p->
lchild,count);
rchild,count);
pNodeT;
intres=0;
请用前序遍历的顺序建立二叉树,叶子节点的左右子树以0结束:
CreateTree(T);
节点数为:
CountNode(T));
leafcount(T,&
res);
叶子节点数目为:
res);