数据结构实验的报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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&&j
四、实验结果的分析与评价(该部分如不够填写,请填写至附页)
顺序表:#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;i
scanf("%d",&L->elem[i]);
return OK;