软件基础设计报告

  • 格式:doc
  • 大小:519.04 KB
  • 文档页数:19

下载文档原格式

  / 19
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);