数据结构实验的报告

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

试验编号:______四川师大数据结构实验报告2011 年3 月27 日计算机科学学院09 级4 班实验名称:线性表实验

姓名:余燕敏学号:2009110468 指导老师:李敏实验成绩:________

一、实验目的及要求

1)熟悉线性表的基本运算在两种存储结构(顺序结构和链式结构)上的实现;

2)以线性表的各种操作(建立、插入、删除等)的实现为重点;

3)通过本次实习帮助学生加深对高级语言C语言的使用(特别是函数参数、指针类型、

链表的使用)。

2)认真阅读和掌握本实验的参考程序,上机运行本程序,保存和打印出程序的运行

结果,并结合程序进行分析。按照你对线性表的操作需要,重新改写主程序并运行,

打印出文件清单和运行结果。

二、实验内容

1)编程实现线性表两种存储结构中的基本操作的实现(线性表的创建、插入、删除和查找),并设计一个主菜单完成各个功能的调用。

三、实验主要流程、基本操作或核心代码、算法片段(该部分如不够填写,请填写至附页)

<一>顺序表:

主函数main主要调用子函数InitList_Sq(&sq)顺序表的创建、ListInsert_Sq(&sq,s,number)

顺序表的插入、PrintNumber(sq)打印新得的数、ListDelete_Sq(&sq,s,&number顺序表的删

除,建立新的整型变量s、ret、number,字符变量char。

子函数InitList_Sq(&sq)完成顺序表的创建功能,先构造一个空表L,并设置空表长度为0,

然后初始存储容量。

子函数ListInsert_Sq(&sq,s,number)完成顺序表的插入的功能,if(L->length>=L->listsize) {newbase=(ElemType*)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType))

;}表示若当前存储空间已满,还要增加分配。q=&(L->elem[i-1]),q为插入位置,取i-1的

地址赋给q。for(p=&(L->elem[L->length-1]);p>=q;--p) *(p+1)=*p为插入位置及之后的元

素后移。

子函数ListDelete_Sq(&sq,s,&number完成顺序表的删除的功能。首先用

f((i<1)||(i>L->length)) return ERROR判断i的值是否合法,若不合法,则错误。P为被删

除元素的位置。被删除元素之后的元素要往左移。

<链表>

主函数main主要调用子函数CreateList_L(&L,k)链表的创建、ListInsert_L(&L,m,&n)链表的插入、ListDelete_L(&L,m)链表的删除、length=length_L(L)、display_all(L,length)打印新得的数、GetELem_L(L,t,&e)链表的查找,并利用条件语句do…while,switch语句。

子函数CreateList_L(LinkList *L,int n)完成链表的创建功能。输入n个元素的值,

建立带表头结点的单链表线性L。(*L)->next=NULL先建立一个带头结点的单链表,

*L=(LinkList)malloc(sizeof(LNode))用malloc开辟一个空间生成新结点,scanf("%d",&p->data); p->next=NULL; tail->next=p; tail=tail-> next;输入元素值,并插入到表头。

子函数ListInsert_L(LinkList *L,int i,ElemType *e)完成链表的插入功能。用

while语句寻找第i-1个结点,s=(LinkList)malloc(sizeof(LNode)); s->data=*e; s->next=p->next; p->next=s;生成新结点,并插入L中。

子函数ListDelete_L(LinkList *L,int i)完成在带头结点单链线性表L中,删除第i个元素,并返回其值的功能。用while(p->next&&jnext; ++j;} 语句寻找第i个结点,并令p指向其前驱。if(!(p->next)||j>i-1)return ERROR; q=p->next; p->next=q->next; free(q);删除位置不合理。删除并释放结点。子函数display_all(LinkList L,int length)用于显示经过子函数处理所得的新的数。

四、实验结果的分析与评价(该部分如不够填写,请填写至附页)

顺序表:#include "stdio.h"

#include "conio.h"

#include

#include

#define LIST_INIT_SIZE 100

#define LISTINCREMENT 10

#define OK 1

#define ERROR 0

#define OVERFLOW -1

typedef int Status;

typedef int ElemType ;

typedef struct

{

ElemType *elem;

int length;

int listsize;

}SqList;

Status InitList_Sq(SqList*L)

{

int i;

L->elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));

if(!L->elem) exit(OVERFLOW);

L->length=0;

L->listsize=LIST_INIT_SIZE;

printf("How many number do you Init?\n");

scanf("%d",&L->length);

for(i=0;ilength;i++)

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

return OK;

相关文档
最新文档