数据结构课后作业23.docx

上传人:b****8 文档编号:10830247 上传时间:2023-02-23 格式:DOCX 页数:10 大小:82.26KB
下载 相关 举报
数据结构课后作业23.docx_第1页
第1页 / 共10页
数据结构课后作业23.docx_第2页
第2页 / 共10页
数据结构课后作业23.docx_第3页
第3页 / 共10页
数据结构课后作业23.docx_第4页
第4页 / 共10页
数据结构课后作业23.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

数据结构课后作业23.docx

《数据结构课后作业23.docx》由会员分享,可在线阅读,更多相关《数据结构课后作业23.docx(10页珍藏版)》请在冰豆网上搜索。

数据结构课后作业23.docx

数据结构课后作业23

 

实验报告(示例)

 

实验名称:

数据结构与算法

实验学期:

2012-2013

(1)

实验班级:

11物联

姓名:

所属学院:

计算机学院

指导教师:

二〇一二年九月十二日

广东技术师范学院实验报告(示例)

 

实验内容:

线性表及其操作

实验目的:

实验地点:

工业中心202

实验序号:

2

预习内容:

操作情况

实验中出现的主要问题和解决情况

未能在实验前对程序进行文本编辑,使得实验课时间主要花在程序编辑上,运行调试时间十分紧张,对程序算法整体的认识和功能分析没有时间进行,只是停留在将书上给定程序上机运行。

后面的实验需要做好实验前程序代码的预写准备,以提高效率。

结果:

运行正常,输出正确,达到实验目的

 

1.操作步骤

进入VC++6.0:

Windows[开始]→[程序]→[MicrosoftVisual6.0]

利用VC++6.0首先定义一个工程文件

[新建][选择类型win32ConsoleApplication][选择保存路径和文件名][确定][选择建立空工程文件]

在该工程文件中加入C++源文件

[新建][选择文件][选择C源文件][文件名][确定]

编辑该源文件(输入程序代码)

编译、连接(修改与调式)运行程序

在[MicrosoftVisual6.0]中选择[组建]→[编译]/[组建](连接)/[运行]

2.算法描述:

(包含函数:

/*文件名:

algo2-3.cpp*/

#include

#include

typedefcharElemType;

typedefstructDNode/*定义双链表结点类型*/

{

ElemTypedata;

structDNode*prior;/*指向前驱结点*/

structDNode*next;/*指向后继结点*/

}DLinkList;

voidInitList(DLinkList*&L)

{

L=(DLinkList*)malloc(sizeof(DLinkList));/*创建头结点*/

L->prior=L->next=NULL;

}

voidDestroyList(DLinkList*&L)

{

DLinkList*p=L,*q=p->next;

while(q!

=NULL)

{

free(p);

p=q;

q=p->next;

}

free(p);

}

intListEmpty(DLinkList*L)

{

return(L->next==NULL);

}

intListLength(DLinkList*L)

{

DLinkList*p=L;inti=0;

while(p->next!

=NULL)

{

i++;

p=p->next;

}

return(i);

}

voidDispList(DLinkList*L)

{

DLinkList*p=L->next;

while(p!

=NULL)

{

printf("%c",p->data);

p=p->next;

}

printf("\n");

}

intGetElem(DLinkList*L,inti,ElemType&e)

{

intj=0;

DLinkList*p=L;

while(j

=NULL)

{

j++;

p=p->next;

}

if(p==NULL)

return0;

else

{

e=p->data;

return1;

}

}

intLocateElem(DLinkList*L,ElemTypee)

{

intn=1;

DLinkList*p=L->next;

while(p!

=NULL&&p->data!

=e)

{

n++;

p=p->next;

}

if(p==NULL)

return(0);

else

return(n);

}

intListInsert(DLinkList*&L,inti,ElemTypee)

{

intj=0;

DLinkList*p=L,*s;

while(j

=NULL)

{

j++;

p=p->next;

}

if(p==NULL)/*未找到第i-1个结点*/

return0;

else/*找到第i-1个结点*p*/

{

s=(DLinkList*)malloc(sizeof(DLinkList));/*创建新结点*s*/

s->data=e;

s->next=p->next;/*将*s插入到*p之后*/

if(p->next!

=NULL)p->next->prior=s;

s->prior=p;

p->next=s;

return1;

}

}

intListDelete(DLinkList*&L,inti,ElemType&e)

{

intj=0;

DLinkList*p=L,*q;

while(j

=NULL)

{

j++;

p=p->next;

}

if(p==NULL)/*未找到第i-1个结点*/

return0;

else/*找到第i-1个结点*p*/

{

q=p->next;/*q指向要删除的结点*/

if(q==NULL)return0;/*不存在第i个结点*/

p->next=q->next;/*从双链表中删除*q结点*/

if(p->next!

=NULL)p->next->prior=p;

free(q);/*释放*q结点*/

return1;

}

}

voidSort(DLinkList*&head)/*双链表元素排序*/

{

DLinkList*p=head->next,*q,*r;

if(p!

=NULL)/*若原双链表中有一个或以上的数据结点*/

{

r=p->next;/*r保存*p结点后继结点的指针*/

p->next=NULL;/*构造只含一个数据结点的有序表*/

p=r;

while(p!

=NULL)

{

r=p->next;/*r保存*p结点后继结点的指针*/

q=head;

while(q->next!

=NULL&&q->next->datadata)/*在有序表中找插入*p的前驱结点*q*/

q=q->next;

p->next=q->next;/*将*p插入到*q之后*/

if(q->next!

=NULL)q->next->prior=p;

q->next=p;

p->prior=q;

p=r;

}

}

}

voidCreateListR(DLinkList*&L,ElemTypea[],intn)

//由含有n个元素的数组a创建带头结点的双链表L

{

DLinkList*s,*r;inti;

L=(DLinkList*)malloc(sizeof(DLinkList));//创建头结点

L->prior=L->next=NULL;

r=L;//r始终指向尾结点,开始时指向头结点

for(i=0;i

{

s=(DLinkList*)malloc(sizeof(DLinkList));

s->data=a[i];

r->next=s;s->prior=r;//将*s插入*r之后

r=s;//r指向*s结点

}

r->next=NULL;//尾结点next域置为NULL

}

voidmain()

{

DLinkList*h;chara[5],e;inti;

printf("

(1)初始化线性表h:

\n");

InitList(h);

printf("

(2)一次采用尾插法插入啊a,b,c,d,e元素\n");

for(i=0;i<5;i++)

{

scanf("%c",&a[i]);

}

CreateListR(h,a,5);

 

printf("(3)输入双链表h:

");

DispList(h);printf("\n");

printf("(4)输出双链表h长度%d\n",ListLength(h));

printf("(5)判断双链表h是否为空:

");

if(ListEmpty(h))

printf("空表");

else

printf("不为空");

printf("\n");

GetElem(h,3,e);

printf("(6)输出双链表h的第三个元素:

%c\n",e);

printf("(7)输出元素\"a\"的位置%d\n",LocateElem(h,'a'));

printf("(8)在第四个元素位置上插入\"f\"元素\n");

ListInsert(h,4,'f');

printf("(9)输出双链表h:

");

DispList(h);printf("\n");

printf("(10)删除h的第三个元素\n");

ListDelete(h,3,e);

printf("(11)输出双链表h:

");

DispList(h);printf("\n");

printf("(12)释放双链表h\n");

}

3.运行结果:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 其它课程

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1