线性表的操作算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

数据结构实验报告

课题名称:线性表的操作算法姓名:

班级:

学号:

一、 内容提要

1、 掌握使用cFree 上机调试线性表的基本方法;

2、 分别用数组和链表作为存储结构,实现线性表的插入、删除、查找、排序、合并等操作。

二、 实验要求

1、 设计对线性表进行链式存储操作的内容;

2、 写出相应程序;

3、 保存和打印出程序的运行结果,并结合程序进行分析;

三 、实验目的

1、理解数据结构中单链表的定义和建立。

2、掌握单链表中结点结构的C 语言描述。

3、熟练掌握单链表的插入、删除、查找、排序、合并等算法的设计与C 语言实现。

4、将理论与实际相结合,切实提高自己的逻辑能力和动手能力。

四、算法流程图

五、概要设计

1.界面设置

2.功能函数说明与定义

//加载头文件

#include

#include

#define MAXSIZE 100

typedef int ElemType;

//定义结构体类型

typedef struct

{ElemType a[MAXSIZE];

int length;

}SqList;

SqList a,la,lb,lc;

//以下是9个函数的声明

//顺序表的初始化-置空表

void init(SqList *slt);

//创建顺序表

void creat_list(SqList *L);

//输出顺序表

void out_list(SqList L);

//插入

void insert_sq(SqList *L,int i,ElemType e); //删除

ElemType delete_sq(SqList *L,int i);

//查找

ElemType locat_sq(SqList L,ElemType e);

//清空

void DestroyList(SqList *L);

//查找前驱

ElemType PriorElem(SqList *L,ElemType cur_e);

//查找后继

ElemType NextElem(SqList *L,ElemType cur_e);

//合并

void MergeList(SqList *la,SqList *lb,SqList lc);

3.各部分函数的建立

1.顺序表的初始化-置空表

void init(SqList *slt)

{

slt->length=0;

}

2.顺序表结点输入,顺序表的创建

void creat_list(SqList *L)

{int i;

printf("\n 顺序表的长度n=");scanf("%d",&(L->length));

for(i=0;ilength;i++){printf("\n 元素%d=",i);

scanf("%d",&(L->a[i]));

}

printf("顺序表创建成功!!!");

}

3.遍历顺序表

void out_list(SqList L)

{int i;

printf("\n");

for(i=0;i<=L.length-1;i++)printf("%10d",L.a[i]);

printf("\n\n按Enter键,继续。");

}

4.在顺序表的i位置插入值为e的结点

void insert_sq(SqList * L,int i,ElemType e)

{int j;

if(L->length==MAXSIZE)printf("\n overflow !");

else if(i<1||i>L->length+1) printf("\n erroe i !");

else {for(j=L->length-1;j>=i-1;j--)L->a[j+1]=L->a[j];

L->a[i-1]=e;

L->length++;

}

}

5.删除顺序表中第i个位置的结点

ElemType delete_sq(SqList *L,int i)

{ElemType x;int j;

if(L->length==0)printf("\n 是空表格。underflow !"); else if(i<1||i>L->length){printf("\n error i !");

x=-1;}

else{ x=L->a[i-1];

for(j=i;j<=L->length-1;j++) L->a[j-1]=L->a[j];

L->length--;

}

return(x);

}

6.查找值为e的元素

ElemType locat_sq(SqList L, ElemType e)

{int i=0;

while(i<=L.length-1 && L.a[i]!=e)i++;

if(i<=L.length-1) return(i+1);

else return(-1);

}

7.清空顺序表

void DestroyList(SqList *L)

{

//free(L);

L->length=0;

printf("顺序表清空成功");

return;

}

8.查找前驱

ElemType PriorElem(SqList *L,ElemType cur_e)

{

int i=0,pre;

SqList *p;

p=L;

while(i<=L->length&&p->a[i]!=cur_e)

{

i++;

}

if(i>L->length)

return -1;

else

{

pre=p->a[i-1];

相关文档
最新文档