数据结构与算法上机实验报告

合集下载

数据结构与算法实验报告

数据结构与算法实验报告

数据结构与算法实验报告一、实验目的1.学习并掌握线性表的链式存储结构和链表的基本操作;2.掌握链表的插入、删除、查找等基本操作算法的实现;3.了解链表的应用场景。

二、实验内容与过程本次实验主要包括以下实验内容:1.链表的定义与建立;2.链表的插入操作;3.链表的删除操作;4.链表的查找操作;5.链表的遍历操作;6.链表的逆序操作;7.链表的合并操作。

实验过程如下:1.链表的定义与建立首先,我们定义一个链表的结构,其中包括节点的定义,节点的数据域和指针域。

节点的数据域存放具体的数据,指针域用于指向下一个节点。

```typedef struct Nodeint data;struct Node* next;} Node;```然后,我们定义链表的头指针,并初始化为空链表。

```Node* head = NULL;```2.链表的插入操作插入操作是指在链表中间或末尾插入一个新节点。

首先,我们创建一个新节点,并为其分配内存空间。

```Node* newNode = (struct Node*) malloc(sizeof(Node));newNode->data = 10;newNode->next = NULL;```然后,我们遍历链表,找到插入位置。

```Node* current = head;while (current->next != NULL)current = current->next;```最后,我们将新节点插入到链表中。

```current->next = newNode;```3.链表的删除操作删除操作是指删除链表中的一些节点。

首先,我们找到要删除的节点的前一个节点。

```Node* current = head;while (current->next != NULL && current->next->data != data) current = current->next;```然后,我们将要删除的节点的指针域赋值给前一个节点的指针域。

数据结构与算法分析实验报告

数据结构与算法分析实验报告

数据结构与算法分析实验报告一、实验目的本次实验旨在通过实际操作和分析,深入理解数据结构和算法的基本概念、原理和应用,提高解决实际问题的能力,培养逻辑思维和编程技巧。

二、实验环境本次实验使用的编程语言为 Python,使用的开发工具为 PyCharm。

操作系统为 Windows 10。

三、实验内容(一)线性表的实现与操作1、顺序表的实现使用数组实现顺序表,包括插入、删除、查找等基本操作。

通过实验,理解了顺序表在内存中的存储方式以及其操作的时间复杂度。

2、链表的实现实现了单向链表和双向链表,对链表的节点插入、删除和遍历进行了实践。

体会到链表在动态内存管理和灵活操作方面的优势。

(二)栈和队列的应用1、栈的实现与应用用数组和链表分别实现栈,并通过表达式求值的例子,展示了栈在计算中的作用。

2、队列的实现与应用实现了顺序队列和循环队列,通过模拟银行排队的场景,理解了队列的先进先出特性。

(三)树和二叉树1、二叉树的遍历实现了先序、中序和后序遍历算法,并对不同遍历方式的结果进行了分析和比较。

2、二叉搜索树的操作构建了二叉搜索树,实现了插入、删除和查找操作,了解了其在数据快速查找和排序中的应用。

(四)图的表示与遍历1、邻接矩阵和邻接表表示图分别用邻接矩阵和邻接表来表示图,并比较了它们在存储空间和操作效率上的差异。

2、图的深度优先遍历和广度优先遍历实现了两种遍历算法,并通过对实际图结构的遍历,理解了它们的应用场景和特点。

(五)排序算法的性能比较1、常见排序算法的实现实现了冒泡排序、插入排序、选择排序、快速排序和归并排序等常见的排序算法。

2、算法性能分析通过对不同规模的数据进行排序实验,比较了各种排序算法的时间复杂度和空间复杂度。

四、实验过程及结果(一)线性表1、顺序表在顺序表的插入操作中,如果在表头插入元素,需要将后面的元素依次向后移动一位,时间复杂度为 O(n)。

删除操作同理,在表头删除元素时,时间复杂度也为 O(n)。

数据结构与算法实验报告

数据结构与算法实验报告

数据结构与算法实验报告数据结构与算法实验报告一、引言1.1 背景介绍:介绍数据结构与算法在现代科技领域中的重要性和应用。

1.2 实验目的:明确本实验的目标和需要解决的问题。

1.3 实验内容:详细描述本次实验所使用的数据结构和算法。

1.4 实验方法:阐述实验过程中所采用的步骤和方法。

1.5 实验环境:列出本次实验所使用的硬件和软件环境要求。

二、需求分析2.1 功能需求:详细描述实验所要求实现的功能和效果。

2.2 性能需求:阐述实验对资源利用率和运行效率的要求。

2.3 输入输出需求:明确实验所需输入和期望输出的格式和要求。

三、设计与实现3.1 数据结构设计:给出实验所需的数据结构定义和描述。

3.1.1 数据结构一:介绍数据结构一的定义和特点。

3.1.2 数据结构二:介绍数据结构二的定义和特点。

3.2 算法设计:描述实验所需的算法思路和流程。

3.2.1 算法一:阐述算法一的实现原理和步骤。

3.2.2 算法二:阐述算法二的实现原理和步骤。

3.3 实现过程:详细描述根据设计完成的实现过程。

3.3.1 步骤一:列出实现过程中的第一步骤。

3.3.2 步骤二:列出实现过程中的第二步骤。

3.4 算法优化:对实现过程中的算法进行优化和改进。

3.4.1 优化一:介绍所进行的优化操作和效果。

3.4.2 优化二:介绍所进行的优化操作和效果。

四、实验结果与分析4.1 实验数据:给出实验过程中所使用的测试数据。

4.2 实验结果:列出实验运行的结果和输出。

4.3 结果分析:对实验结果进行详细分析和解释。

五、实验总结5.1 实验心得:总结实验过程中所学到的知识和经验。

5.2 实验收获:列出实验中获得的成果和收获。

六、附件本文档涉及的附件包括但不限于:源代码、输入输出样例、实验数据等。

七、注释本文档中涉及的法律名词及其注释如下:- 法律名词一:注释一。

- 法律名词二:注释二。

数据结构与算法实验报告(线性表)

数据结构与算法实验报告(线性表)

一、实验目的1、深刻理解线性结构的特点以及线性表的概念。

2、熟练掌握线性表的顺序存储结构、链式存储结构及基本运算算法的实现,特别是查找、插入和删除等算法。

二、实验环境1) 硬件:每个学生需配备计算机一台,操作系统:Windows2000/XP。

2) 软件:visual c++6.0。

三、实验题目和实验内容实验题目:线性表的顺序、链式表示及其应用实验内容:1、基本题:实验2.1、实验2.2、实验2. 4、实验2.72、附加题:实验2.3、实验2.6(没做)四、实验数据和实验结果2.1a,b,c,d,e2.2a,b,c,d,e22.4a,b,c,d,e2.7第一个多项式:2x+6x^2-4x^3+3x^4 第二个多项式1x-3x^2+6x^3-3x^4五、附录(程序代码)2.1#include<iostream.h>#include<malloc.h>#define MaxSize 50typedef struct{char data[MaxSize];int length;}SqList;void CreateList(SqList *&L,char a[],int n) {int i;L=(SqList *)malloc(sizeof(SqList));for(i=0;i<n;i++)L->data[i]=a[i];L->length=n;}void InitList(SqList *&L){L=(SqList *)malloc(sizeof(SqList));L->length=0;}void DestroyList(SqList *&L){free(L);}int ListEmpty(SqList *L){return (L->length==0);}int ListLength(SqList *L){return (L->length);}void DispList(SqList *L){int i;for(i=0;i<L->length;i++)cout<<L->data[i];cout<<endl;}char GetElem(SqList *L,int i,char &e){if(i<1||i>L->length)return 0;e=L->data[i-1];return e;}第3 页共15 页int LocateElem(SqList *L,char e){int i=0;while(i<L->length&&L->data[i]!=e) i++;if(i>=L->length)return 0;elsereturn i+1;}int ListInsert(SqList*&L,int i,char e) {int j;if(i<1||i>L->length+1)return 0;i--;for(j=L->length;j>i;j--)L->data[j]=L->data[j-1];L->data[i]=e;L->length++;return 1;}int ListDelete(SqList *&L,int i,char &e) {int j;if(i<1||i>L->length)return 0;i--;e=L->data[i];for(j=i;j<L->length-1;j++)L->length--;return 1;}void main (){SqList *p;char b[10],e;int k;cout<<"元素个数:";cin>>k;cout<<"输入元素:";for(int m=0;m<k;m++)cin>>b[m];InitList(p);4CreateList(p,b,k);cout<<"输出顺序表:";DispList(p);cout<<"顺序表长度是:"<<ListLength(p)<<endl;if(ListEmpty(p))cout<<"顺序表为空"<<endl;elsecout<<"顺序表不为空"<<endl;cout<<"顺序表第3位元素是:"<<GetElem(p,3,e)<<endl;cout<<"元素a的位置是:第"<<LocateElem(p,'a')<<"位"<<endl;ListInsert(p,4,'f');cout<<"在第4个元素上插入元素f:";DispList(p);cout<<"删除顺序表第3个元素:";ListDelete(p,3,e);DispList(p);DestroyList(p);}2.2#include<iostream.h>#include<malloc.h>typedef struct LNode{char data;struct LNode *next;}LinkList;void CreateListR(LinkList *&L,char a[],int n){LinkList *s,*r;int i;L=(LinkList *)malloc(sizeof(LinkList));r=L;for(i=0;i<n;i++){s=(LinkList *)malloc(sizeof(LinkList));s->data=a[i];r->next=s;r=s;}r->next=NULL;}第5 页共15 页void InitList(LinkList *&L){L=(LinkList *)malloc(sizeof(LinkList));L->next=NULL;}void DestroyList(LinkList *&L){LinkList *pre=L,*p=pre->next;while(p){free(pre);pre=p;p=pre->next;}free(pre);}int ListEmpty(LinkList *L){return(L->next==NULL);}int ListLength(LinkList *L){int n=0;LinkList *p=L;while(p->next){n++;p=p->next;}return(n);}void DispList(LinkList *L){LinkList *p=L->next;while(p){cout<<p->data;p=p->next;}cout<<endl;}char GetElem(LinkList *L,int i,char &e) {int j=0;6LinkList *p=L;while(j<i&&p!=NULL){j++;p=p->next;}if(!p)return 0;else{e=p->data;return e;}}int LocateElem(LinkList *L,char e){int i=1;LinkList *p=L->next;while(p&&p->data!=e){p=p->next;i++;}if(!p)return(0);elsereturn(i);}int ListInsert(LinkList *&L,int i,char e){int j=0;LinkList *p=L,*s;while(j<i-1&&p){j++;p=p->next;}if(!p)return 0;else{s=(LinkList *)malloc(sizeof(LinkList));s->data=e;s->next=p->next;第7 页共15 页p->next=s;return 1;}}int ListDelete(LinkList *&L,int i,char &e){int j=0;LinkList *p=L,*q;while(j<i-1&&p){j++;p=p->next;}if(!p)return 0;else{q=p->next;if(!q)return 0;e=q->data;p->next=q->next;free(q);return 1;}}void main(){LinkList *h;char b[10],e;int k;cout<<"元素个数:";cin>>k;cout<<"输入元素:";for(int m=0;m<k;m++)cin>>b[m];InitList(h);CreateListR(h,b,k);cout<<"输出单链表:";DispList(h);cout<<"单链表长度是:"<<ListLength(h)<<endl;if(ListEmpty(h))cout<<"单链表为空"<<endl;else8cout<<"单链表不为空"<<endl;cout<<"单链表第3位元素是:"<<GetElem(h,3,e)<<endl;cout<<"元素a的位置是:第"<<LocateElem(h,'a')<<"位"<<endl;ListInsert(h,4,'f');cout<<"在第4个元素上插入元素f:";DispList(h);cout<<"删除单链表第3个元素:";ListDelete(h,3,e);DispList(h);DestroyList(h);}2.4#include<iostream.h>#include<malloc.h>typedef struct LNode{char data;struct LNode *next;}LinkList;void CreateListR(LinkList *&L,char a[],int n){LinkList *s,*r;int i;L=(LinkList *)malloc(sizeof(LinkList));r=L;for(i=0;i<n;i++){s=(LinkList *)malloc(sizeof(LinkList));s->data=a[i];r->next=s;r=s;}r->next=L;}void InitList(LinkList *&L){L=(LinkList *)malloc(sizeof(LinkList));L->next=NULL;}void DestroyList(LinkList *&L){第9 页共15 页LinkList *pre=L->next,*p=pre->next;L->next=NULL;while(p){free(pre);pre=p;p=pre->next;}free(pre);}int ListEmpty(LinkList *L){return(L->next==NULL);}int ListLength(LinkList *L){int n=0;LinkList *p=L;while(p->next!=L&&p->next){n++;p=p->next;}return(n);}void DispList(LinkList *L){LinkList *p=L->next;while(p!=L&&p){cout<<p->data;p=p->next;}cout<<endl;}char GetElem(LinkList *L,int i,char &e) {int j=1;LinkList *p=L->next;while(j<i&&p!=L&&p){j++;p=p->next;}10return 0;else{e=p->data;return e;}}int LocateElem(LinkList *L,char e){int i=1;LinkList *p=L->next;while(p!=L&&p->data!=e&&p){p=p->next;i++;}if(!p)return(0);elsereturn(i);}int ListInsert(LinkList *&L,int i,char e){int j=1;LinkList *p=L->next,*s;while(j<i-1&&p&&p!=L){j++;p=p->next;}if(!p)return 0;else{s=(LinkList *)malloc(sizeof(LinkList));s->data=e;s->next=p->next;p->next=s;return 1;}}int ListDelete(LinkList *&L,int i,char &e) {第11 页共15 页LinkList *p=L->next,*q;while(j<i-1&&p&&p!=L){j++;p=p->next;}if(!p)return 0;else{q=p->next;if(!q||q==L->next)return 0;e=q->data;p->next=q->next;free(q);return 1;}}void main(){LinkList *h;char b[10],e;int k;cout<<"元素个数:";cin>>k;cout<<"输入元素:";for(int m=0;m<k;m++)cin>>b[m];InitList(h);CreateListR(h,b,k);cout<<"输出循环单链表:";DispList(h);cout<<"循环单链表长度是:"<<ListLength(h)<<endl;if(ListEmpty(h))cout<<"循环单链表为空"<<endl;elsecout<<"循环单链表不为空"<<endl;cout<<"循环单链表第3位元素是:"<<GetElem(h,3,e)<<endl;cout<<"元素a的位置是:第"<<LocateElem(h,'a')<<"位"<<endl;ListInsert(h,4,'f');cout<<"在第4个元素上插入元素f:";DispList(h);12cout<<"删除循环单链表第3个元素:";ListDelete(h,3,e);DispList(h);DestroyList(h);}2.7#include<iostream.h>#include<malloc.h>typedef struct polynomial{int coef; //系数int index; //指数struct polynomial *next;}LinkList;void CreateList(LinkList *&L, int n){LinkList *s,*r;int i;L=(LinkList *)malloc(sizeof(LinkList));r=L;for(i=0;i<n;i++){s=(LinkList*)malloc(sizeof(LinkList));cout<<"依次输入多项式系数和指数:";cin>>s->coef>>s->index;s->next = NULL;r->next=s;r=s;}}void InitList(LinkList *&L){L=(LinkList *)malloc(sizeof(LinkList));L->next=NULL;}void AddList(LinkList *&list1,LinkList *&list2,int m,int n) {LinkList *s,*r,*t;int i;s=list1->next;r=list2->next;t=list1;第13 页共15 页for(i=0;i<n;i++){if(s==NULL){s=list1->next;t=list1;}while(s!=NULL){if(s->index!=r->index){s=s->next;t=t->next;}else break;}if(!s){s=(LinkList*)malloc(sizeof(LinkList));s->coef=r->coef;s->index=r->index;s->next=NULL;t->next=s;s=s->next;r=r->next;continue;}else{if(s->index==r->index)s->coef=s->coef+r->coef;if(s->coef==0){LinkList *temp1;temp1=s;s=s->next;t->next=s;delete temp1;}}r=r->next;s=NULL;}cout<<"多项式相加的结果是:";14list1=list1->next;while(list1){cout<<list1->coef<<"x^"<<list1->index;if(list1->next!=NULL)cout<<"+";list1=list1->next;}}void DispList(LinkList *L){L=L->next;while(L){cout<<L->coef<<"x^"<<L->index;if(L->next!=NULL)if(L->next->coef>0)cout<<"+";L=L->next;}}void main(){LinkList *list1,*list2;InitList(list1);InitList(list2);int m,n;cout<<"请输入第一个多项式的项数:";cin>>m;CreateList(list1,m);cout<<"多项式表示是:";DispList(list1);cout<<endl;cout<<"请输入第二个多项式的项数:";cin>>n;CreateList(list2,n);cout<<"多项式表示是:";DispList(list2);cout<<endl;AddList(list1,list2,m,n);cout<<endl;}第15 页共15 页。

数据结构与算法实验报告(一)

数据结构与算法实验报告(一)

数据结构与算法实验报告(二)实验人: 学号: 时间:2013.4.23实验名称:迷宫问题实验原理:利用一个二维数组maze[i][j]表示迷宫,其中,. 数组元素值为1,表示该位置是墙壁,不能通行;元素值为0,表示该位置是通路。

假定从maze[1][1]出发,出口位于maze[m] [n]。

移动方向可以是8个方向(东,东南,南,西南,西,西北,北和东北)。

实验过程记录:(1)//比较A, B是否是同一点if (A.x==B.x&&A.y==B.y){return 1;}else{return 0;}(2) case 2:B.x=A.x+1;B.y=A.y+1;break;case 3:B.x=A.x;B.y=A.y+1;break;case 4:B.x=A.x-1;B.y=A.y+1;break;case 5:B.x=A.x-1;B.y=A.y;break;case 6:B.x=A.x-1;B.y=A.y-1;break;case 7:B.x=A.x;B.y=A.y-1;break;case 8:B.x=A.x+1;B.y=A.y-1;break;(3) maze[curpos.x][curpos.y]=8; //写一个函数留下足迹,将maze[curpos.x] [curpos.y] == 0改为不等于0,1的数字(4)maze[(e.seat).x][(e.seat).y] =3; //留下不能通过的记号,将maze[(e.seat). x][(e.seat).y] == 0改为未用过的数字实验过程中的问题:实验结果报告与实验总结:迷宫是:(1 表示障碍,0表示可以通过)1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 0 1 0 0 0 1 1 0 0 0 1 1 1 1 1 11 1 0 0 0 1 1 0 1 1 1 0 0 1 1 1 11 0 1 1 0 0 0 0 1 1 1 1 0 0 1 1 11 1 1 0 1 1 1 1 0 1 1 0 1 1 0 0 11 1 1 0 1 0 0 1 0 1 1 1 1 1 1 1 11 0 0 1 1 0 1 1 1 0 1 0 0 1 0 1 11 0 0 1 1 0 1 1 1 0 1 0 0 1 0 1 11 0 1 1 1 1 0 0 1 1 1 1 1 1 1 1 11 0 0 1 1 0 1 1 0 1 1 1 1 1 1 0 11 1 1 0 0 0 1 1 0 1 1 0 0 0 0 0 11 0 0 1 1 1 1 1 0 0 0 1 1 1 1 0 11 0 1 0 0 1 1 1 1 1 0 1 1 1 1 0 11 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1一条通路的二元组数据序列:->(1,1)->(2,2)->(2,3)->(3,4)->(4,3)->(5,3)->(6,2)->(7,2)->(6,1)->(7,1)->(8,1) ->(9,1)->(9,2)->(10,3)->(10,4)->(10,5)->(9,5)->(8,6)->(8,7)->(9,8)->(10,8)->(11, 8)->(11,9)->(12,10)->(11,10)->(10,11)->(10,12)->(10,13)->(10,14)->(11,15)->(12, 15)路径是沿着 8 走1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 11 8 1 3 3 3 1 1 3 3 3 1 1 1 1 1 11 1 8 8 3 1 1 3 1 1 1 3 3 1 1 1 11 0 1 1 8 3 3 3 1 1 1 1 3 3 1 1 11 1 1 8 1 1 1 1 3 1 1 3 1 1 3 3 11 1 1 8 1 0 0 1 3 1 1 1 1 1 1 1 11 8 8 1 1 0 1 1 1 3 1 0 0 1 0 1 11 8 8 1 1 0 1 1 1 3 1 0 0 1 0 1 11 8 1 1 1 1 8 8 1 1 1 1 1 1 1 1 11 8 8 1 1 8 1 1 8 1 1 1 1 1 1 0 11 1 1 8 8 8 1 1 8 1 1 8 8 8 8 0 11 0 0 1 1 1 1 1 8 8 8 1 1 1 1 8 11 0 1 0 0 1 1 1 1 1 8 1 1 1 1 8 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 Press any key to continue思考与疑问:。

数据结构与算法实验报告[1]

数据结构与算法实验报告[1]

数据结构与算法实验报告实验目的:本次实验主要目的是掌握数据结构与算法的基本概念和实际应用。

通过设计和实现特定的数据结构和算法,加深对其原理和应用的理解,培养分析和解决实际问题的能力。

实验内容:本次实验包括以下几个部分:1\实验环境和工具介绍在本部分,将介绍实验所使用的开发环境和工具,包括操作系统、编程语言、集成开发环境等。

2\实验设计和思路本部分将详细介绍实验的设计思路、算法的选择和实现方式。

具体包括数据结构的选择、算法的设计原理、时间和空间复杂度分析等。

3\实验步骤和代码实现在本部分,将详细列出实验的具体步骤和算法的实现代码。

包括数据结构的定义和操作、算法的实现和测试数据的等。

4\实验结果和分析在本部分,将展示实验的运行结果,并对实验结果进行分析和讨论。

包括实际运行时间、空间占用、算法的优缺点等方面的讨论。

5\实验总结和思考在本部分,将对整个实验进行总结和思考。

包括实验过程中遇到的问题和解决方法,对实验结果的评价,以及对进一步的研究方向的思考等内容。

附件:本文档附带以下附件:1\源代码:包括数据结构的定义和操作,算法的实现等。

2\测试数据:用于验证算法实现的测试数据。

3\实验结果截图:包括算法运行结果、时间和空间占用等方面的截图。

法律名词及注释:1\数据结构:在计算机科学中,数据结构是指相互之间存在一种或多种特定关系的数据元素的集合。

2\算法:算法是解决问题的一系列清晰而简明的指令,是计算或操作的一种良定义的规程。

3\时间复杂度:时间复杂度是度量算法运行时间长短的一个表达式,用大O符号表示。

4\空间复杂度:空间复杂度是度量算法运行过程中所需的存储空间的一个表达式,用大O符号表示。

结语:本文档详细介绍了数据结构与算法实验的设计思路、步骤和实现代码,并对实验结果进行了分析和讨论。

实验过程中,我们掌握了数据结构与算法的基本概念和实际应用,提高了问题解决能力和编程实践能力。

算法与及数据结构实验报告

算法与及数据结构实验报告

算法与及数据结构实验报告算法与数据结构实验报告一、实验目的本次算法与数据结构实验的主要目的是通过实际操作和编程实现,深入理解和掌握常见算法和数据结构的基本原理、特性和应用,提高我们解决实际问题的能力和编程技巧。

二、实验环境本次实验使用的编程语言为 Python,开发环境为 PyCharm。

同时,为了进行算法性能的分析和比较,使用了 Python 的 time 模块来计算程序的运行时间。

三、实验内容1、线性表的实现与操作顺序表的实现:使用数组来实现顺序表,并实现了插入、删除、查找等基本操作。

链表的实现:通过创建节点类来实现链表,包括单向链表和双向链表,并完成了相应的操作。

2、栈和队列的应用栈的实现与应用:用数组或链表实现栈结构,解决了表达式求值、括号匹配等问题。

队列的实现与应用:实现了顺序队列和循环队列,用于模拟排队系统等场景。

3、树结构的探索二叉树的创建与遍历:实现了二叉树的先序、中序和后序遍历算法,并对其时间复杂度进行了分析。

二叉搜索树的操作:构建二叉搜索树,实现了插入、删除、查找等操作。

4、图的表示与遍历邻接矩阵和邻接表表示图:分别用邻接矩阵和邻接表来存储图的结构,并对两种表示方法的优缺点进行了比较。

图的深度优先遍历和广度优先遍历:实现了两种遍历算法,并应用于解决路径查找等问题。

5、排序算法的比较插入排序、冒泡排序、选择排序:实现了这三种简单排序算法,并对不同规模的数据进行排序,比较它们的性能。

快速排序、归并排序:深入理解并实现了这两种高效的排序算法,通过实验分析其在不同情况下的表现。

6、查找算法的实践顺序查找、二分查找:实现了这两种基本的查找算法,并比较它们在有序和无序数据中的查找效率。

四、实验步骤及结果分析1、线性表的实现与操作顺序表:在实现顺序表的插入操作时,如果插入位置在表的末尾或中间,需要移动后续元素以腾出空间。

删除操作同理,需要移动被删除元素后面的元素。

在查找操作中,通过遍历数组即可完成。

数据结构与算法上机实验报告

数据结构与算法上机实验报告

数据结构与算法B上机实验报告第1次2011-10-02 顺序表的实现和基本操作第2次2011-10-29 二叉树的实现和递归遍历第3次2011-11-23 内部排序第4次2011-12-dd 实现图从邻接矩阵到邻接表存储转化第一次线性表数据结构一、上机实习题目线性链表操作——插入、删除、合并、排序、查找二数据结构设计(算法设计)源程序(#include <iostream>#define MaxSize 100using namespace std;typedef int ElemType;class SeqList{ElemType list[MaxSize];int length;public:SeqList() {length=0;}void SeqListSort(int i,ElemType x);void SeqListCreat(int n);void SeqListInset(int i,ElemType x);void SeqListDelete(int i);void SeqListMerge();int GetLength(){return length;}int SeqListFind(ElemType x);int SeqListIsEmpty();void SeqListPrint();}Mylist1,Mylist2;//创建顺序表void SeqList::SeqListCreat(int n){ElemType x;cout<<"请输入数据元素:";for (int i=0;i<n;i++){cin>>x;list[i]=x;length++;}}//对顺序表进行排序void SeqList::SeqListSort(int i,ElemType x) {for(int k=0;k<length;k++){for(i=k+1;i<=length;i++){if(list[k]>list[i]){x=list[k];list[k]=list[i];list[i]=x;}}}}//在顺序表L中的第i个位置插入新元素x void SeqList::SeqListInset(int i,ElemType x) {int k;if(length>=MaxSize)cout<<"表已满,无法插入!"<<endl;else if(i<0||i>length)cout<<"参数i不合理!"<<endl;else{for (k=length;k>=i;k--){list[k]=list[k-1];}list[i-1]=x;length++;}}//删除第i个位置的数据元素void SeqList::SeqListDelete(int i){int k;if(!SeqListIsEmpty())cout<<"表已空,无法删除!"<<endl;else if(i<0||i>length)cout<<"参数i不合理!"<<endl;elsefor(k=i-1;k<length;k++)list[k]=list[k+1];length--;}//查找元素x在表中的位置int SeqList::SeqListFind(ElemType x) {int i=0;while(i<length&&list[i]!=x)i++;if(i>length)return -1;elsereturn i+1;}//判断顺序表是否为空int SeqList::SeqListIsEmpty(){if(length<=0)return 0;else return 1;}//将顺序表显示在屏幕上void SeqList::SeqListPrint(){if(!SeqListIsEmpty())cout<<"空表!"<<endl;elsefor(int i=0;i<length;i++)cout<<list[i]<<" ";cout<<endl;}int main(){SeqList Mylist1,Mylist2;int i,n,flag=1,select;ElemType x;cout<<"1. 建立顺序表\n";cout<<"2. 对顺序表进行排序\n";cout<<"3. 求x数值的位置\n";cout<<"4. 在第i个位置插入新元素x\n"; cout<<"5. 删除第i个位置上的数值\n"; cout<<"6. 将两个顺序表合并\n";cout<<"7. 退出\n";cout<<endl;while (flag){cout<<"请选择操作:";cin>>select;switch(select){case 1:cout<<"请输入顺序表1的长度:";cin>>n;Mylist1.SeqListCreat(n);cout<<"你所输入的顺序表1为:";Mylist1.SeqListPrint();cout<<"请输入顺序表2的长度:";cin>>n;Mylist2.SeqListCreat(n);cout<<"你所输入的顺序表2为:";break;case 2:cout<<"请选择所要排序的顺序表1或2:"; cin>>n;if(n==1){Mylist1.SeqListSort(i,x);cout<<"排序后的顺序表1为:";Mylist1.SeqListPrint();}else{Mylist2.SeqListSort(i,x);cout<<"排序后的顺序表2为:";Mylist2.SeqListPrint();}break;case 3:cout<<"请输入x的值:";cin>>x;i=Mylist1.SeqListFind(x);if(i!=-1) cout<<"x的位置为:"<<i<<endl;else cout<<"没有找到!";break;case 4:cout<<"请输入要插入的元素的位置和数值x:"; cin>>i>>x;cout<<"插入后的顺序表为:";Mylist1.SeqListPrint();break;case 5:cout<<"请输入要删除的元素的位置:";cin>>i;Mylist1.SeqListDelete(i);cout<<"删除后的顺序表为:";Mylist1.SeqListPrint();break;case 6:cout<<"合并后的顺序表为:\n";Mylist1.SeqListPrint();Mylist2.SeqListPrint();break;case 7:flag=0;break;}}}三运行结果为:四、上机环境和使用语言(计算机程序实现)Visual C++。

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

数据结构与算法B上机实验报告第1次2011-10-02 顺序表的实现和基本操作第2次2011-10-29 二叉树的实现和递归遍历第3次2011-11-23 内部排序第4次2011-12-dd 实现图从邻接矩阵到邻接表存储转化第一次线性表数据结构一、上机实习题目线性链表操作——插入、删除、合并、排序、查找二数据结构设计(算法设计)源程序(#include <iostream>#define MaxSize 100using namespace std;typedef int ElemType;class SeqList{ElemType list[MaxSize];int length;public:SeqList() {length=0;}void SeqListSort(int i,ElemType x);void SeqListCreat(int n);void SeqListInset(int i,ElemType x);void SeqListDelete(int i);void SeqListMerge();int GetLength(){return length;}int SeqListFind(ElemType x);int SeqListIsEmpty();void SeqListPrint();}Mylist1,Mylist2;//创建顺序表void SeqList::SeqListCreat(int n){ElemType x;cout<<"请输入数据元素:";for (int i=0;i<n;i++){cin>>x;list[i]=x;length++;}}//对顺序表进行排序void SeqList::SeqListSort(int i,ElemType x) {for(int k=0;k<length;k++){for(i=k+1;i<=length;i++){if(list[k]>list[i]){x=list[k];list[k]=list[i];list[i]=x;}}}}//在顺序表L中的第i个位置插入新元素x void SeqList::SeqListInset(int i,ElemType x) {int k;if(length>=MaxSize)cout<<"表已满,无法插入!"<<endl;else if(i<0||i>length)cout<<"参数i不合理!"<<endl;else{for (k=length;k>=i;k--){list[k]=list[k-1];}list[i-1]=x;length++;}}//删除第i个位置的数据元素void SeqList::SeqListDelete(int i){int k;if(!SeqListIsEmpty())cout<<"表已空,无法删除!"<<endl;else if(i<0||i>length)cout<<"参数i不合理!"<<endl;elsefor(k=i-1;k<length;k++)list[k]=list[k+1];length--;}//查找元素x在表中的位置int SeqList::SeqListFind(ElemType x) {int i=0;while(i<length&&list[i]!=x)i++;if(i>length)return -1;elsereturn i+1;}//判断顺序表是否为空int SeqList::SeqListIsEmpty(){if(length<=0)return 0;else return 1;}//将顺序表显示在屏幕上void SeqList::SeqListPrint(){if(!SeqListIsEmpty())cout<<"空表!"<<endl;elsefor(int i=0;i<length;i++)cout<<list[i]<<" ";cout<<endl;}int main(){SeqList Mylist1,Mylist2;int i,n,flag=1,select;ElemType x;cout<<"1. 建立顺序表\n";cout<<"2. 对顺序表进行排序\n";cout<<"3. 求x数值的位置\n";cout<<"4. 在第i个位置插入新元素x\n"; cout<<"5. 删除第i个位置上的数值\n"; cout<<"6. 将两个顺序表合并\n";cout<<"7. 退出\n";cout<<endl;while (flag){cout<<"请选择操作:";cin>>select;switch(select){case 1:cout<<"请输入顺序表1的长度:";cin>>n;Mylist1.SeqListCreat(n);cout<<"你所输入的顺序表1为:";Mylist1.SeqListPrint();cout<<"请输入顺序表2的长度:";cin>>n;Mylist2.SeqListCreat(n);cout<<"你所输入的顺序表2为:";break;case 2:cout<<"请选择所要排序的顺序表1或2:"; cin>>n;if(n==1){Mylist1.SeqListSort(i,x);cout<<"排序后的顺序表1为:";Mylist1.SeqListPrint();}else{Mylist2.SeqListSort(i,x);cout<<"排序后的顺序表2为:";Mylist2.SeqListPrint();}break;case 3:cout<<"请输入x的值:";cin>>x;i=Mylist1.SeqListFind(x);if(i!=-1) cout<<"x的位置为:"<<i<<endl;else cout<<"没有找到!";break;case 4:cout<<"请输入要插入的元素的位置和数值x:"; cin>>i>>x;cout<<"插入后的顺序表为:";Mylist1.SeqListPrint();break;case 5:cout<<"请输入要删除的元素的位置:";cin>>i;Mylist1.SeqListDelete(i);cout<<"删除后的顺序表为:";Mylist1.SeqListPrint();break;case 6:cout<<"合并后的顺序表为:\n";Mylist1.SeqListPrint();Mylist2.SeqListPrint();break;case 7:flag=0;break;}}}三运行结果为:四、上机环境和使用语言(计算机程序实现)Visual C++。

使用语言:C++五、上机总结(体会提高)总的来说,这次让我感触最深的就是C++挺麻烦的,应该说我还是太不熟悉了,以前没有怎么接触过,通过这次实验,我初步掌握了一点点的C++的基础,往后我要多花点时间学习。

再者,通过这次实验,我也掌握了对于线性表的的表示,使用,特别是顺序表。

但是对于链表还是有待提高。

六、参考资料《据结构与算法分析》教材,《据结构》(C语言版),《软件开发技术基础》(第二版)。

同时还有网上的一些资源。

当然还有同学之间的探讨。

第二次:非线性表数据结构一、上机实习题目编写的递归算法,交换二叉树的左右子树。

二数据结构设计(算法设计)源程序#include<stdio.h>#include<malloc.h>#define N 9typedef struct binode{int data;struct binode *lchild,*rchild;//指向左右孩子的指针}binode,*bitree;//结点与指针typedef struct{bitree elem[100];int top;}stack;bitree creat_bt()//按先序建二叉树{bitree t;int i,x=0;//一颗N个结点的二叉树tscanf("%d",&x);if(x==100)//输入100作为结束该结点,而不是用循环t=NULL;else{t=(bitree)malloc(sizeof(binode));t->data=x;printf("请输入%d结点的左子结点",t->data);t->lchild=creat_bt();printf("请输入%d结点的右子结点",t->data);t->rchild=creat_bt();}return t;}bitree exchange(bitree t) //递归左、右子树交换{bitree p;if(t!=NULL){ p=t->lchild;t->lchild=t->rchild;t->rchild=p;exchange(t->lchild);exchange(t->rchild);}return t;}void preorder(bitree bt) //递归的先序遍历{ if (bt){printf("% d",bt->data);preorder(bt->lchild);preorder(bt->rchild);}}main(){bitree root;//一颗树rootprintf("\n");printf("输入二叉树的元素:");root=creat_bt();printf("交换前的先序序列是:"); preorder(root);exchange(root);printf("\n交换后的先序序列是:"); preorder(root);printf("\n");}三运行结果为:四、上机环境和使用语言(计算机程序实现)Visual C++。

相关文档
最新文档