武汉理工大学数据结构线性表实验报告.docx

上传人:b****7 文档编号:25158171 上传时间:2023-06-05 格式:DOCX 页数:11 大小:91.51KB
下载 相关 举报
武汉理工大学数据结构线性表实验报告.docx_第1页
第1页 / 共11页
武汉理工大学数据结构线性表实验报告.docx_第2页
第2页 / 共11页
武汉理工大学数据结构线性表实验报告.docx_第3页
第3页 / 共11页
武汉理工大学数据结构线性表实验报告.docx_第4页
第4页 / 共11页
武汉理工大学数据结构线性表实验报告.docx_第5页
第5页 / 共11页
点击查看更多>>
下载资源
资源描述

武汉理工大学数据结构线性表实验报告.docx

《武汉理工大学数据结构线性表实验报告.docx》由会员分享,可在线阅读,更多相关《武汉理工大学数据结构线性表实验报告.docx(11页珍藏版)》请在冰豆网上搜索。

武汉理工大学数据结构线性表实验报告.docx

武汉理工大学数据结构线性表实验报告

武汉理工大学理学院数学系课程实验报告

 

课程名称:

数据结构与算法

班级

数学类1402班

日期

2015年11月1日

 成绩评定

 

姓名

明钊

实验室

 老师签名

 

学号

0121414670211

实验名称

 实验一线性表的设计与实现

所用软件

 

 Visuac++6.0,word

实验目的:

掌握在visualc++下线性表的两种存储结构:

顺序存储和链式存储各自的编程框架;

实验内容:

掌握顺序表和单链表下建表、遍历、插入、删除、求前驱、求后继等算法的实现;

 原

一、实现顺序表的建立、插入数据、删除、遍历、求长度

各函数代码及解释如下:

StatusSqlistCreate(SqList&L,intlen)

//顺序表的建立函数:

从键盘接收数据,依次放入顺序表

{inti;

for(i=0;i

{printf("请输入第%d个元素",i+1);

scanf("%d",&L.elem[i]);

}

return1;

L.length=len;

}

intListLength(SqListL)//求顺序表的长度

{printf("\n新表长度为%d",L.length);

returnL.length;

}

voidListPrintf(SqList&L,intlen)//顺序表的遍历

{

inti;

for(i=0;i

printf("%d\t",L.elem[i]);

}

StatusListInsert(SqList&L,inti,ElemTypee)//在第i个元素前插入元素e

{

ElemType*newbase,*q,*p;

if(i<1||i>L.length+1)

returnERROR;

if(L.length==L.listsize)

{newbase=(ElemType*)realloc(L.elem,

(L.listsize+LIST_INCREMENT)*sizeof(ElemType));

if(!

newbase)

exit(OVERFLOW);

L.elem=newbase;

L.listsize+=LIST_INCREMENT;

}

q=L.elem+i-1;

for(p=L.elem+L.length-1;p>=q;--p)

*(p+1)=*p;

*q=e;

++L.length;

ListPrintf(L,L.length);

ListLength(L);

returnOK;

}

StatusListDelete(SqList&L,inti,ElemType&e)//删除第i个元素之前的元素

{

ElemType*p,*q;

if(i<1||i>L.length)

returnERROR;

p=L.elem+i-1;

e=*p;

q=L.elem+L.length-1;

for(++p;p<=q;++p)

*(p-1)=*p;

L.length--;

returnOK;

}

测试主程序如下:

Voidmain(void)

{SqListL;

InitList(L);

printf("初始化L后,L.length=%d,L.listsize=%d,L.elem=%u\n",L.length,

L.listsize,L.elem);

intlength;

printf("输入表的长度length=");

scanf("%d",&length);

ListCreate(L,length);

ListPrintf(L,length);

intn,m;

printf("\n请输入要插入的位置(第n个元素前)n=");

scanf("%d",&n);

printf("请输入要插入的数据m=");

scanf("%d",&m);

ListInsert(L,n,m);

inti,e;

printf("输入要删除的第i个元素i=");

scanf("%d",&i);

ListDelete(L,i,e);

}

 :

 

 

二、单链表的建立与操作

各函数如下:

StatusCreateList_L(LinkList&L,intn)//用头插法建立一个长度为n的单链表

{

inti;LinkListp,s;

L->next=NULL;

L=(LinkList)malloc(sizeof(LNode));

L->next=NULL;p=L;

for(i=n;i>0;i--)

{

s=(LinkList)malloc(sizeof(LNode));

printf("输入新节点:

");

scanf("%d",&s->data);

p->next=s;

p=p->next;p->next=NULL;

}

returnOK;

}

StatusListprintf(LinkList&L)//遍历函数

{

LinkListp=L;intlen=0,e;

p=p->next;

while(p)

{

len++;

e=p->data;

p=p->next;

printf("%d",e);

}

printf("该链表的长度为%d",len);

returnOK;

}

StatusListInsert(LinkList&L,inti,ElemTypee)//在第i个元素前插入一个元素e

{

intj=0;

LinkLists,p=L;

while(p&&j

{j++;

p=p->next;

}

if(!

p||j>i-1)

returnERROR;

s=(LinkList)malloc(sizeof(LNode));

s->data=e;

s->next=p->next;

p->next=s;

Listprintf(L);

returnOK;

}

StatusListdelete(LinkList&L,inti,ElemType&e)//删除第i个元素

{

intj;LinkListp,q;

p=L;j=0;

while(p->next&&j

j++;p=p->next;

}//循环结束后,p指针指向第i-1个元素,而p->next指向第i个节点

if(!

(p->next)||j>i-1)return0;//删除位置不合理

q=p->next;p->next=q->next;e=q->data;

printf("删除的元素为%d",e);printf("\n");

free(q);

Listprintf(L);

returnOK;

}

StatusForewardElist(LinkList&L,inti,ElemType&v)//第i个元素的前驱

{

intj;LinkListp,q;

p=L;j=0;

if(i==1)return0;

while(p->next&&j

j++;p=p->next;

}

if(!

(p->next)||j>i-2)return0;

q=p->next;p->next=q->next;

v=q->data;

printf("第%d个元素的前驱为v=%d",i,v);

returnOK;

}

StatusBackwardlist(LinkList&L,inti,ElemType&x)//第i个元素的后继

{

intj;LinkListp,q;

p=L;j=0;

while(p->next&&j

j++;p=p->next;

}

if(!

(p->next)||j>i-1||p->next==NULL)return0;

q=p->next;p->next=q->next;

x=q->data;

printf("第%d个元素的后继为x=%d",i,x);

returnOK;

}

测试主函数如下:

Voidmain(void)

{LinkListL;

inta;

inti,j;

intm;

intk,l,v,x;

ElemTypee;

InitList(L);

printf("请输入初始链表的长度");

scanf("%d",&a);

CreateList_L(L,a);

Listprintf(L);

printf("要插入的位置(第i个元素前)i=");

scanf("%d",&i);printf("要插入的元素m=");scanf("%d",&m);

ListInsert(L,i,m);

printf("删除的位置(第j个元素)j=");scanf("%d",&j);

Listdelete(L,j,e);

printf("你要求的第i个元素的前驱");

scanf("%d",&k);

ForewardElist(L,k,v);

printf("你要求的第i个元素的后继");

scanf("%d",&l);

Backwardlist(L,l,x);

}

程序运行结果截图如下:

 

三:

实验结果分析

通过通过以上函数的编写,本人掌握了顺序表的建立、插入数据、删除、遍历、

求长度以及单链表的建立(头插法)、插入数据、删除、遍历、求第i个元素的前驱、第i个元素的后继、求长度的算法,在编程中,难点是数据的插入与删除,重点要掌握顺序表与单链表的建立以及元素的插入与删除的算法,注意语句的先后顺序,注意单链表中结点之间的关系.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  

 

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

当前位置:首页 > 医药卫生 > 基础医学

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

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