软件基础设计报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件基础设计报告学院:电气信息工程学院
班级:电科1102班
姓名:许波益
学号:3110504052
实验一
在交互方式下完成下列任务:
1、建立单向链表,表长任意;
2、可交互输出单链表中的内容;
3、编写算法计算出自己所建单链表的长度并输出;
4、删除自己所建单链表中的第K个结点,并将剩余结点输出;
5、将单链表倒排,输出结果。
源代码:
#include
#include
struct LinkList
{int data;
struct LinkList *next;
};
struct LinkList *CreatLList()
{struct LinkList * H=NULL,*p,*q;
int x;
q=NULL;
printf("输入一个数(-1结束):");
scanf("%d",&x);
while(x!=-1) {p=(struct LinkList *)malloc(sizeof(struct LinkList));
p->data=x;
if(H==NULL) H=p;
else q->next=p;
q=p;
printf("继续输入:");
scanf("%d",&x);
}
if(q!=NULL) q->next=NULL;
return(H);
}
void Outputlist(struct LinkList *Head)
{ struct LinkList *H;
H=Head;
printf("链表是:\n");
while (H!=NULL)
{ printf("%d ",H->data);
H=H->next;
}
printf("\n");
}
LengthLList(struct LinkList *L)
{int Length=0;
struct LinkList *p=L;
while(p!=NULL)
{p=p->next;
Length++;
}
return Length;
}
void DeleteLList(struct LinkList *L)
{int a;
struct LinkList *p,*s;
printf("输入要删除的数:");
scanf("%d",&a);
if(L->next==NULL) return ;
p=L;s=p;
while((p->next!=NULL)&&(p->data!=a))
{s=p;
p=p->next;
}
if(p==NULL) { printf("链表中无此数\n");return ; } s->next=p->next;
free(p);
printf("已删除\n");
return ;
}
struct LinkList *NIXU(struct LinkList *h)
{struct LinkList *p,*r,*s;
r=h;
p=r->next;
s=p->next;
if(h==NULL) printf("空链表\n");
while(s!=NULL&&h!=NULL)
{p->next=r;
r=p;
p=s;
s=s->next;
}
h->next=NULL;
p->next=r;
return p;
}
void main()
{int a;
struct LinkList *head;
while(1)
{ printf("功能:\n");
printf("1:建立链表\n");
printf("2:输出链表\n");
printf("3:计算链表长度\n");
printf("4:删除链表结点\n");
printf("5:链表逆序\n");
printf("6:退出\n");
printf("输入功能:");
scanf("%d",&a);
if(a<=6&&a>=1)
{switch(a)
{ case 1: head=CreatLList();break;
case 2:Outputlist(head);break;
case 3: printf("链表长度是: %d\n",LengthLList(head));break;
case 4:DeleteLList(head);break;
case 5:head=NIXU(head);break;
case 6:exit(0); break;
default:break;
}
}
else {printf("错误的功能号码\n");}
}
}
实验二
在交互方式下完成下列任务:
1、动态交互建立二叉树,结点个数任意;
2、分别用DLR、LDR、LRD三种方式对二叉树进行便利
并输出结果;
3、计算二叉树中的结点个数并输出;
4、计算二叉树的深度并输出;
源代码:
# include "stdio.h"
# include "malloc.h"
struct BTNode
{
int data;
struct BTNode *Lchild,*Rchild;
};
struct BTNode *build(struct BTNode *p);
struct BTNode *creatrent(struct BTNode *p);
void DLR(struct BTNode *T);
struct BTNode *creatrent(struct BTNode *p)
{
int x;
printf("输入根:rent=");
scanf("%d",&x);
if(x==1000) {p=NULL;}
else
{
p->data=x;
p->Lchild=(struct BTNode *)malloc(sizeof(struct BTNode));
p->Rchild=(struct BTNode *)malloc(sizeof(struct BTNode));
if(p==NULL) return p;
p->Lchild=build(p->Lchild);