《数据结构》实验报告模板附实例实验一线性表的基本操作实现.doc
《数据结构》-实验报告1

《数据结构》-实验报告1-CAL-FENGHAI.-(YICAI)-Company One1xxx 实验报告一、实验目的1.熟悉上机环境,进一步掌握语言的结构特点。
2.掌握线性表的顺序存储结构的定义及实现。
3.掌握线性表的链式存储结构——单链表的定义及实现。
4.掌握线性表在顺序存储结构即顺序表中的各种基本操作。
5.掌握线性表在链式存储结构——单链表中的各种基本操作。
二、实验内容1.顺序线性表的建立、插入及删除。
2.链式线性表的建立、插入及删除。
三、实验步骤1.建立含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。
2.利用前面的实验先建立一个顺序表L={21,23,14,5,56,17,31},然后在第i个位置插入元素68。
3.建立一个带头结点的单链表,结点的值域为整型数据。
要求将用户输入的数据按尾插入法来建立相应单链表。
四、程序主要语句及作用1)程序1的主要代码(附简要注释)#include<iostream>using namespace std;#define MAXSIZE 1024//#define OVERFLOW 0//#define NULL 0#define OK 1#define MAXSIZE 1024typedef int elemtype; /* 线性表中存放整型元素 */typedef struct //结构定义头文件sqlist.h{ elemtype vec[MAXSIZE];int len; /* 顺序表的长度 */}sqlist;int initlist(sqlist *L,int k){ int i;printf("Input the list:");for( i=0;i<k;i++)scanf("%d", &L->vec[i]);//cin>>L->vec[i];同效,注意输入时地址"&"return OK;}// 以下是整个源程序:#include"sqlist.h"int main(){ int i,n;sqlist *L,a; //定义表的变量printf("\n Input the length of the list L:\n");scanf("%d",&n);L=&a; //指针引用,如果去掉L=&a语句,会出现什么结果?L->len=n; //将长度传给leninitlist(L,n);printf("Output the list and its length:\n");for(i=0;i<n;i++)printf("%d ", L->vec[i]);printf("\nThis sqlist's length is %d", L->len);system("pause");return 0;}2)程序2的主要代码(附简要注释)/*顺序表的插入利用前面的实验先建立一个顺序表L={21,23,14,5,56,17,31}然后在第i个位置插入元素68。
数据结构实验报告-线性表(顺序表实现)

实验1:线性表(顺序表的实现)一、实验项目名称顺序表基本操作的实现二、实验目的掌握线性表的基本操作在顺序存储结构上的实现。
三、实验基本原理顺序表是由地址连续的的向量实现的,便于实现随机访问。
顺序表进行插入和删除运算时,平均需要移动表中大约一半的数据元素,容量难以扩充四、主要仪器设备及耗材Window 11、Dev-C++5.11五、实验步骤1.导入库和一些预定义:2.定义顺序表:3.初始化:4.插入元素:5.查询元素:6.删除元素:7.销毁顺序表:8.清空顺序表:9.顺序表长度:10.判空:11.定位满足大小关系的元素(默认小于):12.查询前驱:13.查询后继:14.输出顺序表15.归并顺序表16.写测试程序以及主函数对顺序表的每一个操作写一个测试函数,然后在主函数用while+switch-case的方式实现一个带菜单的简易测试程序,代码见“实验完整代码”。
实验完整代码:#include <bits/stdc++.h>using namespace std;#define error 0#define overflow -2#define initSize 100#define addSize 10#define compareTo <=typedef int ElemType;struct List{ElemType *elem;int len;int listsize;}L;void init(List &L){L.elem = (ElemType *) malloc(initSize * sizeof(ElemType)); if(!L.elem){cout << "分配内存失败!";exit(overflow);}L.len = 0;L.listsize = initSize;}void destroy(List &L){free(L.elem);L.len = L.listsize = 0;}void clear(List &L){L.len = 0;}bool empty(List L){if(L.len == 0) return true;else return false;}int length(List L){return L.len;}ElemType getElem(List L,int i){if(i < 1 || i > L.len + 1){cout << "下标越界!";exit(error);}return L.elem[i - 1];}bool compare(ElemType a,ElemType b) {return a compareTo b;}int locateElem(List L,ElemType e) {for(int i = 0;i < L.len;i++){if(compare(L.elem[i],e))return i;}return -1;}int check1(List L,ElemType e){int idx = -1;for(int i = 0;i < L.len;i++)if(L.elem[i] == e)idx = i;return idx;}bool check2(List L,ElemType e){int idx = -1;for(int i = L.len - 1;i >= 0;i--)if(L.elem[i] == e)idx = i;return idx;}int priorElem(List L,ElemType cur_e,ElemType pre_e[]) {int idx = check1(L,cur_e);if(idx == 0 || idx == -1){string str = "";str = idx == 0 ? "无前驱结点" : "不存在该元素";cout << str;exit(error);}int cnt = 0;for(int i = 1;i < L.len;i++){if(L.elem[i] == cur_e){pre_e[cnt ++] = L.elem[i - 1];}}return cnt;}int nextElem(List L,ElemType cur_e,ElemType next_e[]){int idx = check2(L,cur_e);if(idx == L.len - 1 || idx == - 1){string str = "";str = idx == -1 ? "不存在该元素" : "无后驱结点";cout << str;exit(error);}int cnt = 0;for(int i = 0;i < L.len - 1;i++){if(L.elem[i] == cur_e){next_e[cnt ++] = L.elem[i + 1];}}return cnt;}void insert(List &L,int i,ElemType e){if(i < 1 || i > L.len + 1){cout << "下标越界!";exit(error);}if(L.len >= L.listsize){ElemType *newbase = (ElemType *)realloc(L.elem,(L.listsize + addSize) * sizeof(ElemType));if(!newbase){cout << "内存分配失败!";exit(overflow);}L.elem = newbase;L.listsize += addSize;for(int j = L.len;j > i - 1;j--)L.elem[j] = L.elem[j - 1];L.elem[i - 1] = e;L.len ++;}void deleteList(List &L,int i,ElemType &e){if(i < 1 || i > L.len + 1){cout << "下标越界!";exit(error);}e = L.elem[i - 1];for(int j = i - 1;j < L.len;j++)L.elem[j] = L.elem[j + 1];L.len --;}void merge(List L,List L2,List &L3){L3.elem = (ElemType *)malloc((L.len + L2.len) * sizeof(ElemType)); L3.len = L.len + L2.len;L3.listsize = initSize;if(!L3.elem){cout << "内存分配异常";exit(overflow);}int i = 0,j = 0,k = 0;while(i < L.len && j < L2.len){if(L.elem[i] <= L2.elem[j])L3.elem[k ++] = L.elem[i ++];else L3.elem[k ++] = L2.elem[j ++];}while(i < L.len)L3.elem[k ++] = L.elem[i ++];while(j < L2.len)L3.elem[k ++] = L2.elem[j ++];}bool visit(List L){if(L.len == 0) return false;for(int i = 0;i < L.len;i++)cout << L.elem[i] << " ";cout << endl;return true;}void listTraverse(List L){if(!visit(L)) return;}void partion(List *L){int a[100000],b[100000],len3 = 0,len2 = 0; memset(a,0,sizeof a);memset(b,0,sizeof b);for(int i = 0;i < L->len;i++){if(L->elem[i] % 2 == 0)b[len2 ++] = L->elem[i];elsea[len3 ++] = L->elem[i];}for(int i = 0;i < len3;i++)L->elem[i] = a[i];for(int i = 0,j = len3;i < len2;i++,j++) L->elem[j] = b[i];cout << "输出顺序表:" << endl;for(int i = 0;i < L->len;i++)cout << L->elem[i] << " ";cout << endl;}//以下是测试函数------------------------------------void test1(List &list){init(list);cout << "初始化完成!" << endl;}void test2(List &list){if(list.listsize == 0)cout << "线性表不存在!" << endl;else{int len;ElemType num;cout << "选择插入的元素数量:" << endl;cin >> len;cout << "依次输入要插入的元素:" << endl;for(int i = 1;i <= len;i++){cin >> num;insert(list,i,num);}cout << "操作成功!" << endl;}}void test3(){if(L.listsize == 0)cout << "线性表不存在!" << endl;else{cout << "请输入要返回的元素的下标" << endl;int idx;cin >> idx;cout << "线性表中第" << idx << "个元素是:" << getElem(L,idx) << endl;}}void test4(){if(L.listsize == 0)cout << "线性表不存在!" << endl;else{int idx;ElemType num;cout << "请输入要删除的元素在线性表的位置" << endl;cin >> idx;deleteList(L,idx,num);cout << "操作成功!" << endl << "被删除的元素是:" << num << endl; }}void test5(){if(L.listsize == 0)cout << "线性表不存在!" << endl;else{destroy(L);cout << "线性表已被销毁" << endl;}}void test6(){if(L.listsize == 0)cout << "线性表不存在!" << endl;else{clear(L);cout << "线性表已被清空" << endl;}}void test7(){if(L.listsize == 0)cout << "线性表不存在!" << endl;else cout << "线性表的长度现在是:" << length(L) << endl;}void test8(){if(L.listsize == 0)cout << "线性表不存在!" << endl;else if(empty(L))cout << "线性表现在为空" << endl;else cout << "线性表现在非空" << endl;}void test9(){if(L.listsize == 0)cout << "线性表不存在!" << endl;else{ElemType num;cout << "请输入待判定的元素:" << endl;cin >> num;cout << "第一个与目标元素满足大小关系的元素的位置:" << locateElem(L,num) << endl;}}void test10(){if(L.listsize == 0)cout << "线性表不存在!" << endl;else{ElemType num,num2[initSize / 2];cout << "请输入参照元素:" << endl;cin >> num;int len = priorElem(L,num,num2);cout << num << "的前驱为:" << endl;for(int i = 0;i < len;i++)cout << num2[i] << " ";cout << endl;}}void test11(){if(L.listsize == 0)cout << "线性表不存在!" << endl;else{ElemType num,num2[initSize / 2];cout << "请输入参照元素:" << endl;cin >> num;int len = nextElem(L,num,num2);cout << num << "的后继为:" << endl;for(int i = 0;i < len;i++)cout << num2[i] << " ";cout << endl;}}void test12(List list){if(L.listsize == 0)cout << "线性表不存在!" << endl;else{cout << "输出线性表所有元素:" << endl;listTraverse(list);}}void test13(){if(L.listsize == 0)cout << "初始线性表不存在!" << endl; else{List L2,L3;cout << "初始化一个新线性表" << endl;test1(L2);test2(L2);cout << "归并两个线性表" << endl;merge(L,L2,L3);cout << "归并成功!" << endl;cout << "输出合并后的线性表" << endl;listTraverse(L3);}}void test14(){partion(&L);cout << "奇偶数分区成功!" << endl;}int main(){std::ios::sync_with_stdio(false);cin.tie(0),cout.tie(0);int op = 0;while(op != 15){cout << "-----------------menu--------------------" << endl;cout << "--------------1:初始化------------------" << endl;cout << "--------------2:插入元素----------------" << endl;cout << "--------------3:查询元素----------------" << endl;cout << "--------------4:删除元素----------------" << endl;cout << "--------------5:销毁线性表--------------" << endl;cout << "--------------6:清空线性表--------------" << endl;cout << "--------------7:线性表长度--------------" << endl;cout << "--------------8:线性表是否为空----------" << endl;cout << "--------------9:定位满足大小关系的元素--" << endl;cout << "--------------10:查询前驱---------------" << endl;cout << "--------------11:查询后继---------------" << endl;cout << "--------------12:输出线性表-------------" << endl;cout << "--------------13:归并线性表-------------" << endl;cout << "--------------14:奇偶分区---------------" << endl;cout << "--------------15: 退出测试程序-----------" << endl;cout << "请输入指令编号:" << endl; if(!(cin >> op)){cin.clear();cin.ignore(INT_MAX,'\n');cout << "请输入整数!" << endl;continue;}switch(op){case 1:test1(L);break;case 2:test2(L);break;case 3:test3();break;case 4:test4();break;case 5:test5();break;case 6:test6();break;case 7:test7();break;case 8:test8();break;case 9:test9();break;case 10:test10();break;case 11:test11();break;case 12:test12(L);break;case 13:test13();break;case 14:test14();break;case 15:cout << "测试结束!" << endl;default:cout << "请输入正确的指令编号!" << endl;}}return 0;}六、实验数据及处理结果1.初始化:2.插入元素3.查询元素(返回的是数组下标,下标从0开始)4.删除元素(位置从1开始)5.销毁顺序表6.清空顺序表7.顺序表长度(销毁或清空操作前)8.判空(销毁或清空操作前)9.定位满足大小关系的元素(销毁或清空操作前)说明:这里默认找第一个小于目标元素的位置且下标从0开始,当前顺序表的数据为:1 4 2 510.前驱(销毁或清空操作前)11.后继(销毁或清空操作前)12.输出顺序表(销毁或清空操作前)13.归并顺序表(销毁或清空操作前)七、思考讨论题或体会或对改进实验的建议通过本次实验,我掌握了定义线性表的顺序存储类型,加深了对顺序存储结构的理解,进一步巩固和理解了顺序表的基本操作,如建立、查找、插入和删除等。
《数据结构》实验报告模板(附实例)--实验一线性表的基本操作实现

《数据结构》实验报告模板(附实例)---实验一线性表的基本操作实现实验一线性表的基本操作实现及其应用一、实验目的1、熟练掌握线性表的基本操作在两种存储结构上的实现,其中以熟悉各种链表的操作为重点。
2、巩固高级语言程序设计方法与技术,会用线性链表解决简单的实际问题。
二、实验内容√ 1、单链表的表示与操作实现 ( * )2、约瑟夫环问题3、Dr.Kong的艺术品三、实验要求1、按照数据结构实验任务书,提前做好实验预习与准备工作。
2、加“*”题目必做,其他题目任选;多选者并且保质保量完成适当加分。
3、严格按照数据结构实验报告模板和规范,及时完成实验报告。
四、实验步骤(说明:依据实验内容分别说明实验程序中用到的数据类型的定义、主程序的流程以及每个操作(成员函数)的伪码算法、函数实现、程序编码、调试与分析、总结、附流程图与主要代码)㈠、数据结构与核心算法的设计描述(程序中每个模块或函数应加注释,说明函数功能、入口及出口参数)1、单链表的结点类型定义/* 定义DataType为int类型 */typedef int DataType;/* 单链表的结点类型 */typedef struct LNode{ DataType data;struct LNode *next;}LNode,*LinkedList;2、初始化单链表LinkedList LinkedListInit( ){ // 每个模块或函数应加注释,说明函数功能、入口及出口参数 }3、清空单链表void LinkedListClear(LinkedList L){// 每个模块或函数应加注释,说明函数功能、入口及出口参数}4、检查单链表是否为空int LinkedListEmpty(LinkedList L){ …. }5、遍历单链表void LinkedListTraverse(LinkedList L){….}6、求单链表的长度int LinkedListLength(LinkedList L){ …. }7、从单链表表中查找元素LinkedList LinkedListGet(LinkedList L,int i){ //L是带头结点的链表的头指针,返回第 i 个元素 }8、从单链表表中查找与给定元素值相同的元素在链表中的位置LinkedList LinkedListLocate(LinkedList L, DataType x){ …… }9、向单链表中插入元素void LinkedListInsert(LinkedList L,int i,DataType x) { // L 为带头结点的单链表的头指针,本算法// 在链表中第i 个结点之前插入新的元素 x}10、从单链表中删除元素void LinkedListDel(LinkedList L,DataType x){ // 删除以 L 为头指针的单链表中第 i 个结点 }11、用尾插法建立单链表LinkedList LinkedListCreat( ){ …… }㈡、函数调用及主函数设计(可用函数的调用关系图说明)㈢程序调试及运行结果分析㈣实验总结五、主要算法流程图及程序清单1、主要算法流程图:2、程序清单(程序过长,可附主要部分)说明:以后每次实验报告均按此格式书写。
大学数据结构实验报告模板

1、实验目的本实验旨在通过实际操作和代码编写,掌握数据结构的基本概念、常用算法和数据结构的应用能力。
2、实验内容2.1 实验一、线性表的基本操作2.1.1 实验介绍在本实验中,我们将实现线性表的基本操作,包括初始化线性表、插入元素、删除元素、查找元素等。
通过这些基本操作的实现,我们可以加深对线性表的理解。
2.1.2 实验步骤步骤一、初始化线性表步骤二、插入元素步骤三、删除元素步骤四、查找元素2.2 实验二、栈的应用——括号匹配2.2.1 实验介绍在本实验中,我们将使用栈来实现括号匹配。
通过这个应用实例,我们可以更好地理解栈的特性和应用场景。
2.2.2 实验步骤步骤一、括号匹配算法的实现步骤二、测试括号匹配算法3、实验结果与分析3.1 实验一结果分析3.1.1 初始化线性表的效率分析3.1.2 插入操作的效率分析3.1.3 删除操作的效率分析3.1.4 查找操作的效率分析3.2 实验二结果分析3.2.1 括号匹配算法的验证3.2.2 算法的时间复杂度分析3.2.3 算法的空间复杂度分析4、实验总结通过本次实验,我们进一步了解了数据结构的基本概念和应用。
我们通过实际操作和代码编写,加深了对线性表和栈的理解,并且掌握了相关算法的实现和分析方法。
5、附件本实验报告涉及的附件包括:- 代码实现文件- 实验数据统计表格6、法律名词及注释在本文档中,涉及的法律名词和注释包括:- 数据结构:指在计算机科学中,我们用来组织和存储数据的方式或格式。
- 线性表:是最基本、最简单、也是最常用的一种数据结构。
线性表中的数据元素之间是一对一的关系。
- 栈:是一种特殊的线性表,它的插入和删除操作只能在同一端进行。
后进先出(Last In First Out,LIFO)是栈的特性之一。
- 括号匹配:是指检查一个字符串中的所有括号是否匹配完整的过程。
数据结构实验线性表基本操作

学《数据结构》课程实验报告实验名称:线性表基本操作的实现实验室(中心):学生信息:专业班级:指导教师:实验完成时间: 2016实验一线性表基本操作的实现一、实验目的1.熟悉C语言的上机环境,进一步掌握C语言的结构特点。
2.掌握线性表的顺序存储结构的定义及C语言实现。
3.掌握线性表的链式存储结构——单链表的定义及C语言实现。
4.掌握线性表在顺序存储结构即顺序表中的各种基本操作。
5.掌握线性表在链式存储结构——单链表中的各种基本操作。
二、实验内容及要求1.顺序线性表的建立、插入、删除及合并。
2.链式线性表的建立、插入、删除及连接。
三、实验设备及软件计算机、Microsoft Visual C++ 6.0软件四、设计方案(算法设计)㈠采用的数据结构本程序顺序表的数据逻辑结构为线性结构,存储结构为顺序存储;链表的数据逻辑结构依然为线性结构,存储结构为链式结构。
㈡设计的主要思路1.建立含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度,顺序表的长度和元素由用户输入;2.利用前面建立的顺序表,对顺序表进行插入、删除及合并操作;3.建立一个带头结点的单链表,结点的值域为整型数据,链表的元素由用户输入;4.对前面建立的链表进行插入、删除及连个链表的连接操作;㈢算法描述1、顺序表void Init(sqlist &);//初始化顺序表BOOL Inse(sqlist &,int,char); //在线性表中插入元素BOOL del(sqlist&,int,char &); //在线性表中删除元素int Loc(sqlist,char); //在线性表中定位元素void print(sqlist); //输出顺序表void combine( sqlist & , sqlist & , sqlist &);//两个线性表的合并2、链表void CreaL(LinkList &,int); //生成一个单链表BOOL LInsert(LinkList &,int,char); //在单链表中插入一个元素BOOL LDele(LinkList &,int,char &); //在单链表中删除一个元素BOOL LFind_key(LinkList,char,int &); //按关键字查找一个元素BOOL LFind_order(LinkList,char &,int); //按序号查找一个元素void LPrint(LinkList); //显示单链表所有元素void LUnion(LinkList &,LinkList &,LinkList &,int); //两个链表的连接五、程序代码1、顺序表#include <stdio.h>#include <conio.h>#define Max 116enum BOOL{False,True};typedef struct{char elem[Max]; //线性表int last; //last指示当前线性表的长度}sqlist;void Init(sqlist &);BOOL Inse(sqlist &,int,char); //在线性表中插入元素BOOL del(sqlist&,int,char &); //在线性表中删除元素int Loc(sqlist,char); //在线性表中定位元素void print(sqlist);void combine( sqlist & , sqlist & , sqlist &);void main(){sqlist L1;sqlist L2;sqlist L3;int loc,S=1;char j,ch;BOOL temp;printf("本程序用来实现顺序结构的线性表。
数据结构--实验报告 线性表的基本操作

数据结构..实验报告线性表的基本操作数据结构实验报告线性表的基本操作1.引言本实验报告旨在介绍线性表的基本操作。
线性表是一种常见的数据结构,它是一组有限元素的有序集合,其中每个元素之间存在一个特定的顺序关系。
线性表的操作包括插入、删除、查找等,这些操作对于有效地管理和利用数据非常重要。
2.实验目的本实验的目的是通过实践理解线性表的基本操作,包括初始化、插入、删除、查找等。
通过编写相应的代码,加深对线性表的理解,并掌握相应的编程技巧。
3.实验内容3.1 初始化线性表初始化线性表是指创建一个空的线性表,为后续的操作做准备。
初始化线性表的方法有多种,如顺序表和链表等。
下面以顺序表为例进行说明。
顺序表的初始化包括定义表头指针和设置表的长度等操作。
3.2 插入元素插入元素是指将一个新的元素插入到线性表的指定位置。
插入元素有两种情况:插入到表的开头和插入到表的中间。
插入元素的操作包括移动其他元素的位置以腾出空间,并将新的元素插入到指定位置。
3.3 删除元素删除元素是指将线性表中的某个元素删除。
删除元素有两种情况:删除表的开头元素和删除表的中间元素。
删除元素的操作包括将被删除元素的前一个元素与后一个元素进行连接,断开被删除元素与表的联系。
3.4 查找元素查找元素是指在线性表中寻找指定的元素。
查找元素的方法有多种,如遍历线性表、二分查找等。
查找元素的操作包括比较目标元素与线性表中的元素进行匹配,直到找到目标元素或遍历完整个线性表。
4.实验步骤4.1 初始化线性表根据线性表的类型选择相应的初始化方法,如创建一个空的顺序表并设置表的长度。
4.2 插入元素输入要插入的元素值和插入的位置,判断插入的位置是否合法。
如果合法,移动其他元素的位置以腾出空间,将新的元素插入到指定位置。
如果不合法,输出插入位置非法的提示信息。
4.3 删除元素输入要删除的元素值,判断元素是否在线性表中。
如果在,则找到目标元素的前一个元素和后一个元素,进行连接删除操作。
数据结构--实验报告 线性表的基本操作

数据结构--实验报告线性表的基本操作数据结构--实验报告线性表的基本操作一、引言本实验报告旨在通过实际操作,掌握线性表的基本操作,包括初始化、插入、删除、查找等。
线性表是最基本的数据结构之一,对于理解和应用其他数据结构具有重要的作用。
二、实验目的1·了解线性表的定义和基本特性。
2·掌握线性表的初始化操作。
3·掌握线性表的插入和删除操作。
4·掌握线性表的查找操作。
5·通过实验巩固和加深对线性表的理解。
三、线性表的基本操作1·初始化线性表线性表的初始化是将一个线性表变量设置为空表的过程。
具体步骤如下:(1)创建一个线性表的数据结构,包括表头指针和数据元素的存储空间。
(2)将表头指针指向一个空的数据元素。
2·插入元素插入元素是向线性表中指定位置插入一个元素的操作。
具体步骤如下:(1)判断线性表是否已满,如果已满则无法插入元素。
(2)判断插入位置是否合法,如果不合法则无法插入元素。
(3)将插入位置及其后面的元素都向后移动一个位置。
(4)将待插入的元素放入插入位置。
3·删除元素删除元素是从线性表中删除指定位置的元素的操作。
具体步骤如下:(1)判断线性表是否为空,如果为空则无法删除元素。
(2)判断删除位置是否合法,如果不合法则无法删除元素。
(3)将删除位置后面的元素都向前移动一个位置。
(4)删除最后一个元素。
4·查找元素查找元素是在线性表中查找指定元素值的操作。
具体步骤如下:(1)从线性表的第一个元素开始,逐个比较每个元素的值,直到找到目标元素或遍历完整个线性表。
(2)如果找到目标元素,则返回该元素的位置。
(3)如果未找到目标元素,则返回找不到的信息。
四、实验步骤1·初始化线性表(1)定义线性表的数据结构,包括表头指针和数据元素的存储空间。
(2)将表头指针指向一个空的数据元素。
2·插入元素(1)判断线性表是否已满。
数据结构--实验报告 线性表的基本操作

数据结构--实验报告线性表的基本操作数据结构实验报告[引言]在本次实验中,我们将学习线性表的基本操作,包括插入、删除、查找等。
通过实践操作,加深对线性表的理解和掌握。
[实验目的]1.学习线性表的基本概念和操作。
2.熟悉线性表的插入、删除和查找等基本操作。
3.掌握线性表的实现方式及其相应的算法。
[实验内容]1.线性表的定义与表示1.1 线性表的定义1.2 线性表的顺序存储结构1.3 线性表的链式存储结构2.线性表的基本操作2.1初始化线性表2.2判断线性表是否为空2.3 插入操作2.3.1 在指定位置插入元素2.3.2 在表尾插入元素2.4 删除操作2.4.1 删除指定位置的元素2.4.2 删除指定值的元素2.5 查找操作2.5.1 按位置查找元素2.5.2 按值查找元素2.6 修改操作2.6.1修改指定位置的元素 2.6.2 修改指定值的元素2.7 清空线性表2.8 销毁线性表[实验步骤]1.初始化线性表1.1 创建一个空的线性表对象1.2 初始化线性表的容量和长度2.插入操作2.1在指定位置插入元素2.1.1 检查插入位置的合法性2.1.2 将插入位置后的元素依次后移2.1.3在指定位置插入新元素2.2 在表尾插入元素2.2.1 将表尾指针后移2.2.2 在表尾插入新元素3.删除操作3.1 删除指定位置的元素3.1.1 检查删除位置的合法性3.1.2 将删除位置后的元素依次前移3.1.3 修改线性表的长度3.2 删除指定值的元素3.2.1 查找指定值的元素位置3.2.2调用删除指定位置的元素操作4.查找操作4.1 按位置查找元素4.1.1 检查查找位置的合法性4.1.2 返回指定位置的元素4.2 按值查找元素4.2.1 从头到尾依次查找元素4.2.2 返回第一个匹配到的元素5.修改操作5.1修改指定位置的元素5.1.1 检查修改位置的合法性5.1.2修改指定位置的元素值5.2修改指定值的元素5.2.1 查找指定值的元素位置5.2.2调用修改指定位置的元素操作6.清空线性表6.1 设置线性表长度为07.销毁线性表7.1 释放线性表的内存空间[实验结果]使用线性表进行各种基本操作的测试,并记录操作的结果和运行时间。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验一线性表的基本操作实现及其应用
一、实验目的
1、熟练掌握线性表的基本操作在两种存储结构上的实现,其中以熟悉各种链表的操作为重点。
2、巩固高级语言程序设计方法与技术,会用线性链表解决简单的实际问题。
二、实验内容
√1、单链表的表示与操作实现( * )
2、约瑟夫环问题
3、Dr.Kong的艺术品
三、实验要求
1、按照数据结构实验任务书,提前做好实验预习与准备工作。
2、加“*”题目必做,其他题目任选;多选者并且保质保量完成适当加分。
3、严格按照数据结构实验报告模板和规范,及时完成实验报告。
四、实验步骤
(说明:依据实验内容分别说明实验程序中用到的数据类型的定义、主程序的流程以及每个操作(成员函数)的伪码算法、函数实现、程序编码、调试与分析、总结、附流程图与主要代码)
㈠、数据结构与核心算法的设计描述
(程序中每个模块或函数应加注释,说明函数功能、入口及出口参数)
1、单链表的结点类型定义
/* 定义DataType为int类型*/
typedef int DataType;
/* 单链表的结点类型*/
typedef struct LNode
{ DataType data;
struct LNode *next;
}LNode,*LinkedList;
2、初始化单链表
LinkedList LinkedListInit( )
{ // 每个模块或函数应加注释,说明函数功能、入口及出口参数} 3、清空单链表
void LinkedListClear(LinkedList L)
{// 每个模块或函数应加注释,说明函数功能、入口及出口参数}
4、检查单链表是否为空
int LinkedListEmpty(LinkedList L)
{ …. }
5、遍历单链表
void LinkedListTraverse(LinkedList L)
{
….
}
6、求单链表的长度
int LinkedListLength(LinkedList L)
{ ….}
7、从单链表表中查找元素
LinkedList LinkedListGet(LinkedList L,int i)
{ //L是带头结点的链表的头指针,返回第i 个元素}
8、从单链表表中查找与给定元素值相同的元素在链表中的位置
LinkedList LinkedListLocate(LinkedList L, DataType x) { ……}
9、向单链表中插入元素
void LinkedListInsert(LinkedList L,int i,DataType x)
{ // L 为带头结点的单链表的头指针,本算法
// 在链表中第i 个结点之前插入新的元素x
}
10、从单链表中删除元素
void LinkedListDel(LinkedList L,DataType x)
{ // 删除以L 为头指针的单链表中第i 个结点}
11、用尾插法建立单链表
LinkedList LinkedListCreat( )
{ ……}
㈡、函数调用及主函数设计
(可用函数的调用关系图说明)
㈢程序调试及运行结果分析
㈣实验总结
五、主要算法流程图及程序清单
1、主要算法流程图:
2、程序清单
(程序过长,可附主要部分)
说明:以后每次实验报告均按此格式书写。
我在布置实验室时,仅给出实验名称、实验目的、实验内容及相关数据结构。
题目一程序参考框架
# include <stdlib.h>
# include <malloc.h>
# include <iostream.h>
# include <conio.h>
# include <stdio.h>
/* 定义ElemType为int类型*/
typedef int ElemType;
#define TRUE 1
#define FALSE 0
#define NULL 0
#define flag -1
/* 单链表的结点类型*/
typedef struct LNode
{ElemType data;
struct LNode *next;
} LNode,*LinkedList;
/* 初始化单链表*/
LinkedList LinkedListInit()
{ }
/* 清空单链表*/
void LinkedListClear(LinkedList L)
{ }
/* 检查单链表是否为空*/
int LinkedListEmpty(LinkedList L)
{ }
/* 遍历单链表*/
void LinkedListTraverse(LinkedList L)
{ }
int LinkedListLength (LinkedList L)
{ }
LinkedList LinkedListGet (LinkedList L, int i)
{ }
LinkedList LinkedListLocate ( LinkedList L, ElemType x) { }
void LinkedListInsert(LinkedList L, int i, ElemType x) {LinkedList pre,p,s;int j;
pre=L;j=1;p=L->next;
while(pre&&j<i)
{pre=p;p=p->next;j++;}
if(pre==NULL)
{printf("给的i值超过了表长");exit(0);}
s=(LNode *)malloc(sizeof(LNode));
s->data=x;
pre->next=s;
s->next=p;
}
void LinkedListDel (LinkedList L,ElemType x)
{ LinkedList pre,p;int j;
pre=L;j=1;p=L->next;
while(p&&p->data!=x)
{pre=p;p=p->next;j++;}
if(p==NULL)
{printf("表中没有值为x的结点");exit(0);}
pre->next=p->next;
free(p);
}
LinkedList LinkedListCreat( )
{ LinkedList L=LinkedListInit(),p,r;
ElemType x;
r=L;
printf("please input data,input -1 is end\n");
scanf("%d",&x);
while (x!=flag)
{p=(LinkedList)malloc(sizeof(LNode));
p->data=x;
r->next=p;
r=p;
scanf("%d",&x);
}
r->next=NULL;
return L;
}
int scan()
{int d;
printf("please input the operation\n");
printf("1.初始化2.清空3.求链表长度4.检查链表是否为空\n");
printf("5.检查链表是否为满 6.遍历链表7.从链表中查找元素\n");
printf("8.从链表中查找与给定元素值相同的元素在顺序表中的位置\n");
printf("9.向链表中插入元素10. 从链表中删除元素\n");
printf("其他键退出。
\n");
scanf("%d",&d);
return(d);
}
main()。