数据结构线性表与链表实验论文 - 范文中心

数据结构线性表与链表实验论文

11/24

数据结构

上机实验1

班级:计科1303

姓名:辛颖

学号:[1**********]24

一、实验题目:线性表

二、实验目的:

1、熟悉将算法转换为程序代码的过程;

2、了解顺序表的逻辑结构特性,熟悉掌握顺序表存储结构的C 语言描述方法;

3、熟悉掌握顺序表的基本运算:查找、插入、删除,掌握顺序表的随机存储特性;

4、了解线性表的链式存储结构及其顺序存储特性,熟悉掌握线性表的链式存储结构的C 语言描述方法;

5、熟悉掌握线性链表(单链表)的基本运算:查找、插入、删除等,能在实际应用中灵活选择适当的链表结构;

6、掌握使用链表表示特定形式数据的方法,并能编写相关运算的算法。

三、实验要求:

(1) 熟悉顺序表的插入、删除和查找。

(2) 熟悉单链表的插入、删除和查找。

(3) 熟悉双链表的插入、删除和查找。

四、实验内容和实验步骤:

1、

#include

#include

#include

#define MaxSize 20

typedef int ElemType;

typedef struct SeqList

{//线性表顺序存储结构定义

ElemType elem[MaxSize];

int length;

}SeqList;

int Init_SeqList(SeqList &L)

{ L.length=0; return 1;}

int Locate_SeqList(SeqList &L,int x)

{

int i=0;

while(i

i++;

if(i>=L.length){printf("顺序表中不存在该元素!\n");return 0;}

else return i+1;

}

int Insert_SeqList(SeqList &L,int i,int x)

{//在顺序存储结构的线性表的第i 个数据元素之前插入新元素x ,1

if(L.length>=MaxSize)

{

printf("顺序表已满,无法进行插入操作!");return 0;}

if(iL.length+1)

{

printf("插入位置不正确!");return 0;}

for(j=L.length-1;j>=i-1;j--)

{

L.elem[j+1]=L.elem[j];

L.elem[i-1]=x;

L.length++;

return 1;

}

}

int Delete_SeqList(SeqList &L,int i)

{//在顺序存储结构的线性表中删除第i 个元素,1

int j;

{ printf("删除位置不正确!");return 0;} for(j=1;j:"); scanf("%d",&i); switch (i) { case 1 : printf("请输入查找元素:");scanf("%d",&x); j=Locate_SeqList(L,x); if(j!=0) printf("指定元素位置=%d\n",j); break; case 2: printf("请输入插入元素位置:");scanf("%d",&k); printf("请输入插入元素值:"); scanf("%d",&x);

} } if(j!=0) {printf("插入后顺序表如下所示\n");Display_SeqList(L);} printf("\n"); break; case 3: printf("请输入删除元素位置:"); scanf("%d",&k); i=Delete_SeqList(L,k); if(j != 0) {printf("删除后顺序表如下所示\n"); Display_SeqList(L); printf("\n"); } break; case 0: exit(0); break; default: printf("输入有误!"); }

(1) 实现顺序表各种基本运算;

1. 以顺序表作为存储结构;

2. 实现顺序表上的数据元素的插入运算;

3. 实现顺序表上的数据元素的删除运算;

4. 实现顺序表上的数据元素的查找运算。

(2) 详细设计

(3) 调试分析:

1. 问题:指针的正确表示,以及C/C++编译软件

的问题需要处理

2. 结果

3. 总结:(*L)、关于顺序表的若干问题

2、

#include

#include

#include

#define flag 0

typedef int ElemType;

typedef struct Lnode

{//链式存储结构定义

int data;

struct Lnode *next;

}Lnode,*LinkList;

Lnode *Get_LinkList(LinkList L,int i)

{//在带头结点单链表中查找第i 个数据元素,找到返回其指针,否则返回空 Lnode *p=L;

int j=0;

while(p!=NULL&&jnext;j++;}

return p;

}

int Locate_LinkList(LinkList L,int x)

{//在带头结点单链表中查找值等于给定值的结点

LinkList p;int j=1;

p=L->next;

while(p!=NULL&&p->data!=x)

{ p=p->next;j++; }

if(p)

{ printf("%d在链表中,是第%d个元素。\n",p->data,j);return j; } else

{ printf("该数值不在链表里。\n");return 0; }

}

int Insert_LinkList(LinkList &L,int i,int x)

{//在带头结点单链表的第i 个位置之后插入值为x 的元素

Lnode *p,*s;

p=Get_LinkList(L,i);

if(p==NULL)

{ printf("参数i 输入有误!\n");return 0; }

else

{ s=(Lnode *)malloc(sizeof(Lnode));

s->data=x; s->next=p->next;

p->next=s; return 1; }

}

int Delete_LinkList(LinkList L,int i)

{//删除带头结点单链表上的第i 个数据结点

LinkList p,s;

p=Get_LinkList(L,i-1);

if(p=NULL)

{ printf("待删除结点前结点不存在!\n");return -1;}

else if(p->next==NULL)

{ printf("该结点不存在!\n");return 0; }

else

{ s=p->next;

p->next=s->next;

free(s);

return 1; }

}

void Create_LinkList(LinkList &L,int n)

{//前插法创建带头结点单链表

int i;

LinkList p;

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

L->next=NULL;

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

{ p=(LinkList)malloc(sizeof(Lnode));

p->data=i;

p->next=L->next;

L->next=p; }

}

void Display_LinkList(LinkList L)

{//单链表的显示

LinkList p;p=L;

while(p->next)

{

printf("%d ",p->next->data);p=p->next;

}

}

void main(int argc,char* argv[])

{

printf("初始化\n建立单链表如下:\n");

LinkList L;

int x,y,cord,i;

Create_LinkList(L,4);

Display_LinkList(L);

do{printf("\n 主菜单 \n");

printf(" 1 尾插法插入元素导指定位置 \n"); printf(" 2 删除某一指定元素 \n");

printf(" 0 结束程序 \n");

printf("-------------------------------------\n");

printf("请输入您选的的菜单号:"); scanf("%d",&cord);

switch(cord)

{

case 1:

printf("请输入插曲元素位置前序号 i:");

scanf("%d",&x);

printf("请输入插入的数据y :");

scanf("%d",&y);

Insert_LinkList(L,x,y);

printf("单链表输出如下:\n");

Display_LinkList(L);

break;

case 2:

printf("请输入删除元素序号x=?");

scanf("%d",&x);

Delete_LinkList(L,x);

printf("单链表输出如下:\n");

Display_LinkList(L);

break;

case 3:

printf("请输入查找元素值x :");

scanf("%d",&x);

i=Locate_LinkList(L,x);

break;

case 0:

exit(0);

break;

default:

printf("输入有误!");

}

}while(cord=0);

}

(1)、实现单链表各种基本运算;

1. 以单链表作为存储结构;

2. 实现单链表上的数据元素的插入运算;

3. 实现单链表上的数据元素的删除运算;

4. 实现单链表上的数据元素的查找。

(2)、详细分析:

(3)、调试分析:

1. 问题 对于插入指针出错的问题,以及function

(*)和function (&)的问题如何解决。分配空间出现空,以及指针指向的是空。

2. 结果

3. 总结:*Linklist、关于单链表的若干问题

3、

#include

#include

#include

typedef int ElemType;

typedef struct DLnode

{

ElemType data;

struct DLnode*prior;

struct DLnode*next;

}DLnode,*DLinkList;

void Init_DLinkList(DLinkList *L)

{

*L=(DLnode*)malloc(sizeof(DLnode));

(*L)->prior=(*L)->next=NULL;

}

void Create_DLinkList(DLinkList *L,int n)

{

int i;

DLinkList p;

(*L)=(DLinkList)malloc(sizeof(DLnode));

(*L)->next=NULL;

(*L)->prior=NULL;

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

{

p=(DLinkList)malloc(sizeof(DLnode));

p->data=i;

p->next=(*L)->next;

(*L)->next=p;

if(p->next!=NULL) p->next->prior=p;

p->prior=*L;

}

return ;

}

int Locate_DLinkList(DLinkList L,ElemType e)

{

int i=1;

DLinkList p=L->next;

while(p!=NULL&&p->data!=e)

{

i++;p=p->next;

}

if(p==NULL)

{

printf("双链表中不存在该元素!\n");return 0; }

else return i;

}

int Insert_DLinkList(DLinkList *L,int i,ElemType e)

{

int j=0;

DLinkList p=*L,s;

while(p!=NULL&&j

{

j++;

p=p->next;

}

if(p==NULL)

{

printf("插入位置不正确!\n");return 0;

}

else

{

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

s->data=e;

s->prior=p->prior;

s->next=p;

p->prior->next=s;

p->prior=s;return 1;

}

}

int Delete_DLinkList(DLinkList *L,int i,ElemType *e) {

int j=0;

DLinkList p=*L;

while(j

{

j++;

p=p->next;

}

if(p==NULL)

{

printf("删除位置不正确!\n");return 0;

}

else

{

(*e)=p->data;

p->prior->next=p->next;

if(p->next!=NULL) p->next->prior=p->prior; free(p);

return 1;

}

}

void Display_DLinkList(DLinkList L)

{

DLinkList p;

p=L->next;

while(p)

{

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

p=p->next;

}

}

void main()

DLinkList L; int i,j,e,x,t; Init_DLinkList(&L); Create_DLinkList(&L,4); printf("初始化\n 建立双链表如下:\n"); Display_DLinkList(L); while(i:"); scanf("%d",&i); switch(i) { case 1: printf("请输入查找元素:"); scanf("%d",&x); j=Locate_DLinkList(L,x); if(j!=0) printf("指定元素位置=%d\n",j); break; case 2: printf("请输入插入元素位置后结点序号:"); scanf("%d",&t); printf("请输入插入元素值:"); scanf("%d",&x); j=Insert_DLinkList(&L,t,x); if(j!=0) { printf("插入后双链表如下所示:\n"); Display_DLinkList(L); } break; case 3: printf("请输入删除元素位置:"); scanf("%d",&t); j=Delete_DLinkList(&L,t,&e); if(j!=0) { printf("删除后双链表如下所示:\n");

} break; case 4: exit(0); break; default:

}

}

}

printf("输入有误"); 1) 实现双链表各种基本运算: 1. 以双链表作为存储结构; 2. 实现双链表上的数据元素的插入运算; 3. 实现双链表上的数据元素的删除运算; 4. 实现双链表上的数据元素的查找运算。 2) 详细分析: 3) 调试分析: 1. 问题:双向链表对应的prior 和next 如何实现连接的原理。以及如何实现双向查询!2. 结果 (((

3. 总结:(*L)、关于双链表的若干问题


相关内容

  • 气体的流量与压力之间的回归分析
    摘要 数理统计是具有广泛应用的数学分支,在生产过程和科学实验中,总会遇到多个变量,同一过程中的这些变量往往是相互依赖,相互制约的,也就是说他们之间存在相互关系,这种相互关系可以分为确定性关系和相关关系. 变量之间的确定性关系和相关关系在一定 ...
  • 改进中值滤波器去噪算法研究
    改进中值滤波器去噪算法研究 陈 亮 (吉首大学信息科学与工程学院,湖南 吉首 416000) 摘 要 图像信号在产生.传输和记录过程中,经常会受到各种噪声的干扰,由于其严重地影响了图像的视觉效果,因此迫切需要合适的滤波器对其进行滤波.论文首 ...
  • 化学专业毕业论文
    学 士 学 位 论 文 题目:磁性Fe 3O 4负载含N .O 类吸 附剂对Ni(II)和Cd(II)的吸附性能 2014年6月3日 独 创 声 明 本人郑重声明:所呈交的毕业论文,是本人在指导老师的指导下,独 立进行研究工作所取得的成果, ...
  • 毕业论文文献综述基于SPSS的多元回归分析模型选取的应用 之文献综述
    基于SPSS 的多元回归分析模型选取的应用 文献综述 重庆工商大学 统计学 2010级 统计2班 殷婷 引 言 随着社会的发展,统计的运用范围越来越广泛,统计学作为高等院校经济类专业和工商管理类专业的核心课程,不管是在经济管理领域,或是在军 ...
  • 聚吡咯纳米复合材料的制备及光电~
    聚吡咯纳米复合材料的制备及光电性能研究 摘 要 将聚吡咯和纳米粒子结合起来制备的复合材料兼具了导电高分子材料.无机半导 体材料的优势,与此同时这种的复合材料还具有显著的三阶非线性光学性质. 本文拟采用界面氧化聚合法制备聚吡咯膜,通过实验发现 ...
  • 一种电子式电流互感器的研制
    # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx 一种电子式电流互感器的研制 申 烛!王士敏!罗承沐 清华大学电机系!北京市#"$$$%&a ...
  • 气相色谱法测定中药材中有机氯农药残留量
    浙江中医杂志2011年5月第46卷第5期 [中药研究] 气相色谱法测定中药材中有机氯农药残留量* 梁卫青 浦锦宝 郑军献 胡轶娟 程林魏克民 浙江省中医药研究院 关键词 气相色谱法 中药材有机氯农药 残留量 浙江杭州310007 有机氯类农 ...
  • 音频信号光纤传输,大物实验,标准论文格式
    音频信号光纤传输实验研究性实验报告 作 者: (作者详细单位,北京邮电大学信通院20112111 邮编:100876) 摘 要:光纤是光导纤维的简写,是一种利用光在玻璃或塑料制成的纤维中的全反射原理而达成的光传导工具.又因其优良的传输特性已 ...
  • 用三线摆测定物体对非质心轴的转动惯量
    第29卷第5期力学与实践 2007年10月 用三线摆测定物体对非质心轴的转动惯量 李刚常1)陈玉坤余征跃 (上海交通大学工程力学实验中心,上海200240) 摘要对三线摆的线性近似模型和转动惯量计算公式的由来作了简要说明.分析了三线摆扭振系 ...
  • 复盐法制备无水氯化镁的热解机理及动力学研究
    第l期 2007年1月 无 CHINESE 机化学学报 V01.23No.1 霾 中图分类号:TQl74:0614.22 JOURNALOFINORGANICCHEMISTRYJan.,2007 复盐法制备无水氯化镁的热解机理及动力学研究 ...