算法与数据结构实验报告

合集下载

数据结构与算法实验报告

数据结构与算法实验报告

数据结构与算法实验报告一、实验目的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)。

本科生《算法与数据结构》实验报告3

本科生《算法与数据结构》实验报告3

《算法与数据结构》实验报告学院专业姓名学号实验1:ADT List(线性表)(3学时)[问题描述]线性表是典型的线性结构,实现ADT List,并在此基础上实现两个集合的交运算或并运算。

[实验目的](1)掌握线性表链表存储结构。

(2)掌握在单链表上基本操作的实现。

(3)在掌握单链表的基本操作上进行综合题的实现。

[实验内容及要求](1)要求用带头结点的单链表存储两个集合中的元素和最终的结果。

(2)集合的元素限定为十进制数,程序应对出现重复的数据进行过滤,即链表中没有重复数据。

(3)显示两个集合的内容及其运算结果。

[测试数据](1)set1={3, 8, 5, 8,11},set2={22, 6, 8, 3, 15,11,20 }set1∪set2=set1∩set2=(2)set1={1, 3, 5, 7},set2={2, 3, 7, 14, 25,38}set1∪set2=set1∩set2=[思考](1)分析你所设计的算法的时间复杂度?(2) 若输入两个集合内的元素是递增的,见测试数据(2),请你提出一种时间复杂度更少的算法思想,并分析时间复杂度是多少?《算法与数据结构》实验报告学院专业姓名学号实验2:利用栈将中缀表达式转换为后缀表达式并进行计算(3学时)[问题描述]中缀表达式是最普通的一种书写表达式的方式,而后缀表达式不需要用括号来表示,计算机可简化对后缀表达式的计算过程,而该过程又是栈的一个典型应用。

[实验目的](1)深入理解栈的特性。

(2)掌握栈结构的构造方法。

[实验内容及要求](1)中缀表达式中只包含+、-、×、/ 运算及(和)。

(2)可以输入任意中缀表达式,数据为一位整数。

(3)显示中缀表达式及转换后的后缀表达式(为清楚起见,要求每输出一个数据用逗号隔开)。

(4)对转换后的后缀表达式进行计算。

栈的类定义如下:#include <iostream.h>const int StackSize=50;class Stack{char *StackList;int top;public:Stack(){StackList=new char[StackSize];top=-1;}bool IsEmpty();bool IsFull();void Push(char x);char Pop();char GetTop();void postexpression();}; // Stack[测试数据](1)6+3*(9-7)-8/2转换后的后缀表达式为:计算结果为:(2)(8-2)/(3-1)*(9-6)转换后的后缀表达式为:计算结果为:[思考](1)把中缀表达式转化为后缀表达式的好处?(2)考虑当表达式中数据的位数超过一位时,如何修改你的程序?困难在哪?《算法与数据结构》实验报告学院专业姓名学号实验3:n皇后问题(6学时)[问题描述]在一个n×n的国际象棋棋盘上按照每行顺序摆放棋子,在棋盘上的每一个格中都可以摆放棋子,但任何两个棋子不得在棋盘上的同一行、同一列、同一斜线上出现,利用递归算法解决该问题,并给出该问题的n个棋子的一个合理布局。

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

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

一、实验目的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 页。

数据结构与算法实验报告

数据结构与算法实验报告

数据结构与算法实验报告实验目的:1.加深对链表的理解,掌握链表的基本操作;2.掌握递归算法的设计思想及应用。

实验内容:本次实验主要包括两个部分的实现与测试,分别为链表的基本操作及递归算法的应用。

一、链表的基本操作1.链表的创建链表的创建主要包括新建链表头结点和逐个插入新结点两个步骤。

首先通过malloc函数新建一个链表头结点,并使链表头结点的指针域为空。

然后通过循环输入新节点的数据值,并将新节点插入到链表的尾部。

2.链表的插入链表的插入操作主要包括在链表头部插入新节点、在链表尾部插入新节点和在链表中间插入新节点。

在插入链表头部时,首先通过malloc函数生成新节点,并将链表头节点指针域的原指向设置为新节点;在插入链表尾部时,首先通过循环找到链表的尾节点,并生成新节点,将尾节点指针域的原指向设置为新节点;在插入链表中间时,首先通过循环找到要插入的位置节点,然后生成新节点,并将新节点指针域的原指向设置为下一个节点,将前一个节点的指针域设置为新节点。

3.链表的删除链表的删除操作主要包括删除头节点、删除尾节点和删除中间节点。

在删除头节点时,首先通过free函数释放头节点的内存空间,然后将链表的头节点指针指向第二个节点;在删除尾节点时,首先通过循环找到倒数第二个节点,并将倒数第二个节点的指针域置空,最后通过free函数释放尾节点的内存空间;在删除中间节点时,首先通过循环找到要删除的节点的前一个节点,然后将前一个节点的指针域指向要删除节点的下一个节点,最后通过free函数释放要删除节点的内存空间。

4.链表的查询链表的查询操作主要包括按位置查询和按值查询。

在按位置查询时,通过循环找到指定位置的节点,然后返回节点的数据值;在按值查询时,通过循环比较节点的数据值与指定值,找到匹配的节点,并返回该节点的位置。

二、递归算法的应用递归算法是一种函数自己调用自己的算法设计思想,具有简洁、清晰的特点。

本次实验主要应用递归算法解决实际问题,包括斐波那契数列的求解和二叉树的遍历。

数据结构与算法实验报告[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、线性表的实现与操作顺序表:在实现顺序表的插入操作时,如果插入位置在表的末尾或中间,需要移动后续元素以腾出空间。

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

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

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

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

数据结构与算法的实验报告数据结构与算法第二次实验报告电子105班赵萌2010021526实验二:栈和队列的定义及基本操作一、实验目的:. 熟练掌握栈和队列的特点. 掌握栈的定义和基本操作,熟练掌握顺序栈的操作及应用. 掌握对列的定义和基本操作,熟练掌握链式队列的操作及应用, 掌握环形队列的入队和出队等基本操作. 加深对栈结构和队列结构的理解,逐步培养解决实际问题的编程能力二、实验内容:定义顺序栈,完成栈的基本操作:空栈、入栈、出栈、取栈顶元素;实现十进制数与八进制数的转换;定义链式队列,完成队列的基本操作:入队和出队;1.问题描述:(1)利用栈的顺序存储结构,设计一组输入数据(假定为一组整数),能够对顺序栈进行如下操作:. 初始化一个空栈,分配一段连续的存储空间,且设定好栈顶和栈底;. 完成一个元素的入栈操作,修改栈顶指针;. 完成一个元素的出栈操作,修改栈顶指针;. 读取栈顶指针所指向的元素的值;. 将十进制数N 和其它d 进制数的转换是计算机实现计算的基本问题,其解决方案很多,其中最简单方法基于下列原理:即除d 取余法。

例如:(1348)10=(2504)8N N div 8 N mod 81348 168 4168 21 021 2 52 0 2从中我们可以看出,最先产生的余数4 是转换结果的最低位,这正好符合栈的特性即后进先出的特性。

所以可以用顺序栈来模拟这个过程。

以此来实现十进制数与八进制数的转换; . 编写主程序,实现对各不同的算法调用。

(2)利用队列的链式存储结构,设计一组输入数据(假定为一组整数),能够对链式队列进行如下操作:. 初始化一个空队列,形成一个带表头结点的空队;. 完成一个元素的入队操作,修改队尾指针;. 完成一个元素的出队操作,修改队头指针;. 修改主程序,实现对各不同的算法调用。

其他算法的描述省略,参见实现要求说明。

2.实现要求:对顺序栈的各项操作一定要编写成为C(C++)语言函数,组合成模块化的形式,每个算法的实现要从时间复杂度和空间复杂度上进行评价。

算法与数据结构实验报告

算法与数据结构实验报告

算法与数据结构实验报告算法与数据结构实验报告1.引言该实验报告旨在介绍算法与数据结构实验的设计、实施和结果分析。

本章节将概述实验的背景和目的。

2.实验设计2.1 实验背景在本节中,我们将介绍该实验的背景和应用领域,以便读者能够更好地理解实验的重要性。

2.2 实验目的在本节中,我们将详细介绍该实验的目的和预期的成果,以便读者明确实验的研究问题和目标。

3.算法与数据结构概述3.1 算法定义在本节中,我们将简要介绍算法的概念,并讨论其在实验中的应用。

3.2 数据结构定义本节将简要介绍数据结构的概念,并说明其在算法中的作用。

4.算法实现4.1 实验环境和工具本节将介绍实验所使用的环境和工具,包括编程语言、开发平台和相关库。

4.2 算法逻辑设计在本节中,我们将详细描述所选算法的逻辑设计,包括输入、处理和输出过程。

4.3 数据结构设计本节将详细介绍所选算法中使用的数据结构设计,包括数组、链表、栈等。

4.4 算法实现步骤在本节中,我们将逐步介绍算法的实现步骤,包括代码编写和算法调试。

5.实验结果与分析5.1 实验数据收集在本节中,我们将详细介绍实验数据的收集以及所采用的评估指标。

5.2 实验结果展示本节将展示实验结果的统计数据、图表和其他可视化形式,以便读者更好地理解实验结果。

5.3 结果分析在本节中,我们将对实验结果进行分析,讨论其优势、局限性以及可能的改进方向。

6.总结与展望6.1 实验总结本节将对整个实验过程进行总结,并概括实验的主要发现和成果。

6.2 实验展望在本节中,我们将探讨实验结果的未来发展方向,并提出后续研究的建议和展望。

附件:1.数据集:包含实验中使用的原始数据集2.源代码:包含实验所编写的算法代码和实现注释:1.算法:指计算机科学中用来解决问题的可执行指令序列。

2.数据结构:指组织和存储数据的方式,以便能够高效地访问和处理。

数据结构与算法实验报告

数据结构与算法实验报告

数据结构与算法实验报告数据结构与算法实验报告一、实验目的本实验旨在通过实践的方式,加深对数据结构与算法的理解与应用,并能够独立设计和实现常见的数据结构和算法。

二、实验要求1·设计并实现以下数据结构与算法:(按需列出具体数据结构与算法)2·进行性能测试,分析并总结测试结果。

3·撰写实验报告,完整记录实验过程与结果,并进行适当的分析与总结。

三、实验环境(列出实验所需环境,包括操作系统、编程语言及开发环境等)四、实验过程与方法4·1 数据结构设计与实现(首先介绍每个数据结构的功能与特点,然后给出设计思路和实现方法,包括数据结构的定义、操作方法和算法等)4·2 算法设计与实现(首先介绍每个算法的功能与特点,然后给出设计思路和实现方法,包括算法的定义、输入输出格式、算法流程图等)五、实验结果与分析5·1 数据结构性能测试结果(列出数据结构的测试用例及其输入输出,记录测试结果,包括运行时间、空间占用等方面的数据,并进行适当的分析与总结)5·2 算法性能测试结果(列出算法的测试用例及其输入输出,记录测试结果,包括运行时间、空间占用等方面的数据,并进行适当的分析与总结)六、实验总结6·1 实验成果(总结实验所达到的目标,列出已实现的数据结构和算法)6·2 实验心得(记录实验过程中的收获和体会,包括困难与解决方法、感悟和改进方向等)附件:1·实验源码(附上实验所使用的源代码文件,以供参考)2·实验数据(附上实验所用的测试数据文件或数据表格等)法律名词及注释:(列出文档中涉及的法律名词及其注释,以确保读者对相关法律法规的理解)。

数据结构与算法专题实验报告

数据结构与算法专题实验报告

附录A:报告格式数据结构与算法专题实验报告目录附录A:报告格式 (1)第一部分题目 (3)第1题约瑟夫环 (3)1 题目 (3)2 目标 (3)3 设计思想 (3)4 算法描述 (4)5 程序流程图 (5)6 源程序 (5)第2题大数阶乘 (9)1 题目 (9)2 目标 (9)3 设计思想 (9)4 算法描述 (10)5 程序流程图 (11)6 源程序 (11)第3题图的遍历 (13)1 题目 (13)2 目标 (13)3 设计思想 (13)4 算法描述 (14)5 程序流程图 (15)6 源程序 (15)第4题最短路径 (19)1 题目 (19)2 目标 (19)3 设计思想 (19)4 算法描述 (20)5 程序流程图 (21)6 源程序 (24)第二部分体会与建议 (28)1体会与收获 (28)2建议与意见 (29)第一部分题目第1题约瑟夫环1 题目:用循环链表实现约瑟夫(Yoseph)环整数)开始任选一个正整数作为报数值m,自第一个人开始按顺时针方向自1开始顺序报数,报到m时停止报数,报m的人出列,将他持有的密码作为新的m值,从他的顺时针方向的下一个人开始重新从1报数,如此下去,直至所有的人全部出列为止。

编写完整的程序求出出列的顺序。

2 目标:1.输入:从键盘输入人数n,n个人的密码以及初始m值。

输入时应有提示,并有纠错措施。

2.输出:输出结果写入文件,包括n、n个密码、m和出列顺序。

3 设计思想:1.用单链表的数据结构实现约瑟夫环。

2.创建单链表默认第i个结点的序号为i,获得第i个结点的数据(第个人的密码,并使其具有纠错功能,用while 语句判断所输入的结点总数与第个个结点的数据是否在允许的范围内,如果在,则继续下去,如果不在,则返回重新输入。

3.约瑟夫环中人员相继有规律的出列其实质是在单链表中连续删除结点直至剩余最后一个结点,当然它还满足一定的条件,那就是每删除一个结点后,下一个待删除的结点是从删除的结点的下一个结点开始计数,数到删除的结点的数据时,再次删除结点。

数据结构及算法实验报告

数据结构及算法实验报告

数据结构及算法实验报告这个实验是关于数据结构和算法的,通过这个实验,我们可以学习和掌握许多知识。

在实验中,我学习了一些重要的数据结构和算法,例如树、排序算法等等。

实验的第一部分是有关树的,我们需要实现一个二叉搜索树。

我决定使用C++语言来实现,因为它在处理指针和链表方面非常方便。

实现一个二叉搜索树不是很困难,但是实验的任务并不仅仅是让我们实现一个树节点的数据结构。

我们还需要在这个树上实现一些基本操作,例如插入、删除和搜索等等。

由于这个二叉搜索树应该是可扩展的,我们需要使用递归算法来实现这些操作。

在实现的过程中,我们需要注意一些细节,例如树的高度、平衡问题和递归的退出条件。

这些都是需要仔细考虑的问题,因为一旦出错,就会影响树的效率和准确性。

在实现的过程中,我遇到了一些挑战。

其中一个问题是如何在树上搜索一个节点。

尽管二叉搜索树是一种优秀的搜索工具,但是我们需要找到正确的节点,否则就会返回错误的结果。

为了解决这个问题,我使用了递归算法,并在每个节点上设置了一个唯一的键,以便进行比较。

在实现二叉搜索树后,下一个任务是实现排序算法。

我选择了快速排序算法,因为这种算法具有快速、高效和可扩展的优点。

快速排序算法基于分治算法,将输入数组分成两个子数组,然后递归地排序这些子数组。

在排序的过程中,我们需要选择一个基准值,并将数组元素按照比基准值小或大的方式进行分组。

在实现的过程中,我遇到了一些麻烦。

其中一个问题是如何选择基准值。

由于不同的基准值会导致不同的分组结果,我需要选择一个方法来确定哪一个基准值是最好的。

我选择了随机选择基准值的方法,因为它可以在不同数据集上得到比较好的结果。

除了快速排序算法外,我还实现了一些其他的排序算法,例如冒泡排序、选择排序和插入排序等等。

这些算法都是基本的排序算法,但它们可以帮助我们更好地理解和掌握排序算法的基本原理。

通过这个实验,我学习了许多有关数据结构和算法的知识。

我现在可以更好地处理树、排序算法等问题,也可以更好地在实际项目中使用它们。

算法与数据结构实验报告

算法与数据结构实验报告

课程名称:算法与数据结构实验项目名称:顺序表实验学时: 2同组学生姓名:实验地点:工科楼A205 实验日期:2013年10月16日实验成绩:批改教师:批改时间:实验1 顺序表一、实验目的和要求掌握顺序表的定位、插入、删除等操作。

二、实验仪器和设备Turbo C 2.0三、实验内容与过程(含程序清单及流程图)1、必做题(1)编写程序建立一个顺序表,并逐个输出顺序表中所有数据元素的值。

编写主函数测试结果。

(2)编写顺序表定位操作子函数,在顺序表中查找是否存在数据元素x。

如果存在,返回顺序表中和x值相等的第1个数据元素的序号(序号从0开始编号);如果不存在,返回-1。

编写主函数测试结果。

(3)在递增有序的顺序表中插入一个新结点x,保持顺序表的有序性。

解题思路:首先查找插入的位置,再移位,最后进行插入操作;从第一个元素开始找到第一个大于该新结点值x的元素位置i即为插入位置;然后将从表尾开始依次将元素后移一个位置直至元素i;最后将新结点x插入到i位置。

(4)删除顺序表中所有等于X的数据元素。

2、选做题(5)已知两个顺序表A和B按元素值递增有序排列,要求写一算法实现将A和B归并成一个按元素值递减有序排列的顺序表(允许表中含有值相同的元素)。

程序清单:1、#define maxsize 100typedef struct{int data[maxsize];int last;}sequenlist;main(){int i;sequenlist l={{2,5,6,8,2,8,4,3},7};printf("\nThe list is:");for(i=0;i<=st;i++) printf("%2d",l.data[i]); }2、#define maxsize 100typedef struct{int data[maxsize];int last;}sequenlist;main(){int x,i,s=-1;sequenlist l={{2,5,6,7,9,8,4,3},7}; printf("\nThe list is:");for(i=0;i<=st;i++)printf("%2d",l.data[i]);printf("\nPlease input the number :"); scanf("%d",&x);for(i=0;i<=st;i++)if(l.data[i]==x){s=i;break;}printf("%d",s);}3、#define maxsize 100typedef struct{int data[maxsize];int last;}sequenlist;main(){int i,x,j;sequenlist l={{1,3,5,6,7,9},5};printf("\nThe list is:");for(i=0;i<=st;i++)printf("%2d",l.data[i]);printf("\nInput the insert number:"); scanf("%d",&x);for(i=1;i<=st;i++)if(l.data[i-1]>x) break;for(j=st;j>=i-1;j--)l.data[j+1]=l.data[j];l.data[i-1]=x;st++;printf("the list after insertion is:\n"); for(j=0;j<=st;j++)printf("%3d",l.data[j]);}4、#define maxsize 100typedef struct{int data[maxsize];int last;}sequenlist;main(){int i,j,x=0,k=0;sequenlist L={{1,3,5,7,2,4,6,8,2,9},9};printf("\n The list is:");for(i=0;i<=st;i++) printf("%3d",L.data[i]);printf("\nPlease input a number x:");scanf("%d",&x);for(i=1;i<=st+1;i++)if(L.data[i-1]==x){for(j=i;j<=st+1;j++) L.data[j-1]=L.data[j];st--;i--;k=1;}if(k==1){printf("The list after deletion is:\n");for(j=0;j<=st;j++) printf("%3d",L.data[j]);}else printf("Not found!\n");}四、实验结果与分析(程序运行结果及其分析)1、输出结果:The list is:2 5 6 8 2 8 4 32、输出结果:The list is:2 5 6 7 9 8 4 3Please input the number:85The list is:2 5 6 7 9 8 4 3Please input the number:1-13、输出结果:The list is:1 3 5 6 7 9Input the insert number:8The list after insertion is:1 3 5 6 7 8 94、输出结果:The list is: 1 3 5 7 2 4 6 8 2 9Please input a number x:5The list after deletion is:1 3 72 4 6 8 2 9The list is: 1 3 5 7 2 4 6 8 2 9Please input a number x:11Not found!五、实验体会(遇到问题及解决办法,编程后的心得体会)遇到问题:读取数据元素时,误将==写成=,导致错误。

算法与数据结构实验报告

算法与数据结构实验报告

算法与数据结构实验报告算法与数据结构实验报告引言算法与数据结构是计算机科学中的两个重要概念。

算法是解决问题的一系列步骤或规则,而数据结构是组织和存储数据的方式。

在本次实验中,我们将探索不同的算法和数据结构,并通过实际的案例来验证它们的效果和应用。

一、排序算法排序算法是计算机科学中最基础的算法之一。

在本次实验中,我们实现了冒泡排序、插入排序和快速排序算法,并对它们进行了比较。

冒泡排序是一种简单但低效的排序算法。

它通过多次遍历待排序的元素,每次比较相邻的两个元素并交换位置,将较大的元素逐渐“冒泡”到数组的末尾。

尽管冒泡排序的时间复杂度为O(n^2),但它易于实现且适用于小规模的数据集。

插入排序是一种更高效的排序算法。

它将待排序的元素依次插入已排好序的部分中,直到所有元素都被插入完毕。

插入排序的时间复杂度为O(n^2),但对于部分有序的数据集,插入排序的效率会更高。

快速排序是一种常用的排序算法,它采用分治的思想。

快速排序的基本思路是选择一个基准元素,将小于基准的元素放在基准的左边,大于基准的元素放在基准的右边,然后对左右两部分分别进行快速排序。

快速排序的时间复杂度为O(nlogn),但在最坏情况下会退化为O(n^2)。

通过实际的实验数据,我们发现快速排序的效率远高于冒泡排序和插入排序。

这是因为快速排序采用了分治的策略,将原始问题划分为更小的子问题,从而减少了比较和交换的次数。

二、查找算法查找算法是在给定数据集中寻找特定元素的算法。

在本次实验中,我们实现了线性查找和二分查找算法,并对它们进行了比较。

线性查找是一种简单但低效的查找算法。

它通过逐个比较待查找的元素和数据集中的元素,直到找到匹配的元素或遍历完整个数据集。

线性查找的时间复杂度为O(n),适用于小规模的数据集。

二分查找是一种更高效的查找算法,但要求数据集必须是有序的。

它通过将数据集划分为两部分,并与中间元素进行比较,从而确定待查找元素所在的部分,然后再在该部分中进行二分查找。

数据结构与算法课内实验实验报告

数据结构与算法课内实验实验报告
(二)基本要求:读取文本文件数据,自定义合适的抽象数据类型按照要求存储数据,并实现下述要求。
(三)内容提要:
1、数据采集
本次实验,每位同学对自己采集到的数据进行处理。数据采集的要求如下:
1)采集时间:(1)11.15~11.16(数据结构专题实验第4次实验);
(2)11.24(第11周周末);
(3)第5次数据结构专题实验时间;
2)对于每段移动,计算平均速度在m个样本上的速度平均值,16段移动可以得到16个速度平均值,对这16个速度平均值进行排序,给出最大和最小速度对应的段ID和平均速度。
3)对于每段移动,计算移动持续时间在m个样本上的移动持续时间平均值,16段移动可以得到16个移动持续时间平均值,对这16个移动持续时间平均值进行排序,给出最长和最短移动持续时间对应的段ID和移动持续时间。
Record record[16]; //文件中的十六段记录
}Sample;
typedef struct Data //读取原始数据时的中间存储结构
{
int x; //x坐标
int y; //y坐标
int time; //时间戳
int type; //操作类型
}Data;
typedef struct Result //统计结果的存储结构
(4)课内实验验收时间待定
2)采集地点:西一楼307;
3)采集时长:每位同学5~10分钟;
4)采集内容:每位同学认真完成指定的鼠标操作,包括鼠标的移动、鼠标单击和鼠标双击(见下述提示1)。
2、数据处理
采集到的数据会以文本的形式保存,一个文本文件称为一个样本。每位同学需要m个样本完成实验。读取文本文件并对数据进行如下操作:
2、文件的基本操作。文件的打开及读取数据,写入数据等。

数据结构与算法实验报告

数据结构与算法实验报告

数据结构与算法实验报告数据结构与算法实验报告1.引言在本实验中,我们将研究和实现一些经典的数据结构和算法,以及它们在各种问题中的应用。

本文档详细介绍了每个实验的目标、方法、结果和分析。

2.实验一:线性表的操作2.1 实验目标本实验旨在熟悉线性表的基本操作,并通过实践掌握线性表的顺序存储结构和链式存储结构的实现。

2.2 实验方法2.2.1 实验环境- 编程语言:C++- 开发工具:Visual Studio Code2.2.2 实验步骤1.实现顺序存储结构的线性表。

2.实现链式存储结构的线性表。

3.通过编写测试用例,验证线性表的各种操作。

2.3 实验结果与分析通过实验,我们完成了线性表的顺序存储结构和链式存储结构的实现,并且通过测试用例验证了它们的正确性。

3.实验二:树的操作3.1 实验目标本实验旨在熟悉树的基本操作,并通过实践掌握二叉树和平衡二叉树的实现。

3.2 实验方法3.2.1 实验环境- 编程语言:C++- 开发工具:Visual Studio Code3.2.2 实验步骤1.实现二叉树的基本操作,如插入节点、删除节点等。

2.实现平衡二叉树,并保持其平衡性。

3.通过编写测试用例,验证树的各种操作。

3.3 实验结果与分析通过实验,我们完成了二叉树和平衡二叉树的实现,并且通过测试用例验证了它们的正确性。

4.实验三:图的操作4.1 实验目标本实验旨在熟悉图的基本操作,并通过实践掌握图的表示方法和常用算法。

4.2 实验方法4.2.1 实验环境- 编程语言:C++- 开发工具:Visual Studio Code4.2.2 实验步骤1.实现图的邻接矩阵表示法和邻接链表表示法。

2.实现图的深度优先搜索和广度优先搜索算法。

3.通过编写测试用例,验证图的各种操作和算法的正确性。

4.3 实验结果与分析通过实验,我们完成了图的邻接矩阵表示法和邻接链表表示法的实现,以及深度优先搜索和广度优先搜索算法的实现,并且通过测试用例验证了它们的正确性。

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

学生实验报告册课程名称:算法与数据结构实验项目名称:顺序表实验学时: 2 同组学生姓名:实验地点:工科楼A205 实验日期: 2013年10月16日实验成绩:批改教师:批改时间:实验1 顺序表一、实验目的和要求掌握顺序表的定位、插入、删除等操作。

二、实验仪器和设备Turbo C 2.0三、实验内容与过程(含程序清单及流程图)1、必做题(1)编写程序建立一个顺序表,并逐个输出顺序表中所有数据元素的值。

编写主函数测试结果。

(2)编写顺序表定位操作子函数,在顺序表中查找是否存在数据元素x。

如果存在,返回顺序表中和x值相等的第1个数据元素的序号(序号从0开始编号);如果不存在,返回-1。

编写主函数测试结果。

(3)在递增有序的顺序表中插入一个新结点x,保持顺序表的有序性。

解题思路:首先查找插入的位置,再移位,最后进行插入操作;从第一个元素开始找到第一个大于该新结点值x的元素位置i即为插入位置;然后将从表尾开始依次将元素后移一个位置直至元素i;最后将新结点x插入到i位置。

(4)删除顺序表中所有等于X的数据元素。

2、选做题(5)已知两个顺序表A和B按元素值递增有序排列,要求写一算法实现将A和B归并成一个按元素值递减有序排列的顺序表(允许表中含有值相同的元素)。

程序清单:1、#define maxsize 100typedef struct{int data[maxsize];int last;}sequenlist;main(){int i;sequenlist l={{2,5,6,8,2,8,4,3},7};printf("\nThe list is:");for(i=0;i<=st;i++) printf("%2d",l.data[i]);}2、#define maxsize 100typedef struct{int data[maxsize];int last;}sequenlist;main(){int x,i,s=-1;sequenlist l={{2,5,6,7,9,8,4,3},7};printf("\nThe list is:");for(i=0;i<=st;i++)printf("%2d",l.data[i]);printf("\nPlease input the number :"); scanf("%d",&x);for(i=0;i<=st;i++)if(l.data[i]==x){s=i;break;}printf("%d",s);}3、#define maxsize 100typedef struct{int data[maxsize];int last;}sequenlist;main(){int i,x,j;sequenlist l={{1,3,5,6,7,9},5};printf("\nThe list is:");for(i=0;i<=st;i++)printf("%2d",l.data[i]);printf("\nInput the insert number:"); scanf("%d",&x);for(i=1;i<=st;i++)if(l.data[i-1]>x) break;for(j=st;j>=i-1;j--)l.data[j+1]=l.data[j];l.data[i-1]=x;st++;printf("the list after insertion is:\n");for(j=0;j<=st;j++)printf("%3d",l.data[j]);}4、#define maxsize 100typedef struct{int data[maxsize];int last;}sequenlist;main(){int i,j,x=0,k=0;sequenlist L={{1,3,5,7,2,4,6,8,2,9},9};printf("\n The list is:");for(i=0;i<=st;i++) printf("%3d",L.data[i]);printf("\nPlease input a number x:");scanf("%d",&x);for(i=1;i<=st+1;i++)if(L.data[i-1]==x){for(j=i;j<=st+1;j++) L.data[j-1]=L.data[j]; st--;i--;k=1;}if(k==1){printf("The list after deletion is:\n");for(j=0;j<=st;j++) printf("%3d",L.data[j]); }else printf("Not found!\n");}四、实验结果与分析(程序运行结果及其分析)1、输出结果:The list is: 2 5 6 8 2 8 4 32、输出结果:The list is: 2 5 6 7 9 8 4 3Please input the number:85The list is: 2 5 6 7 9 8 4 3Please input the number:1-13、输出结果:The list is: 1 3 5 6 7 9Input the insert number:8The list after insertion is:1 3 5 6 7 8 94、输出结果:The list is: 1 3 5 7 2 4 6 8 2 9Please input a number x:5The list after deletion is:1 3 72 4 6 8 2 9The list is: 1 3 5 7 2 4 6 8 2 9Please input a number x:11Not found!五、实验体会(遇到问题及解决办法,编程后的心得体会)遇到问题:读取数据元素时,误将==写成=,导致错误。

实验过程中,顺序表的赋值没有弄懂,以致输出多个0或者少输出。

格式运算符也要正确控制,否则系统会停止工作。

实验体会:通过实验掌握了顺序表的基本操作,如初始化、插入、读取元素、删除等等。

并了解到线性表顺序存储结构的特点,即逻辑关系上相邻的两个元素在物理位置上也相邻,然而从另一方面来看,在做插入和删除时需要移动大量元素。

本次实验基本完成了实验要求的目的,顺序表的初始化,定义,插入,查找等,更好的了解了顺序表基本操作的算法,以及更直观的了解了数据结构在C语言环境下的体现。

实验项目名称:单链表实验学时: 2 同组学生姓名:实验地点:工科楼A205 实验日期: 2013年10月23日实验成绩:批改教师:批改时间:实验2 单链表一、实验目的和要求1、实验目的掌握单链表的定位、插入、删除等操作。

2、实验要求(1)注意链表的空间是动态分配的,某结点不用之后要及时进行物理删除,以便释放其内存空间。

(2)链表不能实现直接定位,一定注意指针的保存,防止丢失。

二、实验仪器和设备Turbo C 2.0三、实验内容与过程(含程序清单及流程图)1、必做题(1)编写程序建立一个单链表,并逐个输出单链表中所有数据元素。

(2)在递增有序的单链表中插入一个新结点x,保持单链表的有序性。

解题思路:首先查找插入的位置然后进行插入操作;从第一个结点开始找到第一个大于该新结点值的结点即为插入位置;然后在找到的此结点之前插入新结点;注意保留插入位置之前结点的指针才能完成插入操作。

(3)编写实现带头结点单链表就地逆置的子函数,并编写主函数测试结果。

2、选做题已知指针LA和LB分别指向两个无头结点单链表的首元结点。

要求编一算法实现,从表LA中删除自第i个元素起共len个元素后,将它们插入到表LB中第j个元素之前。

程序清单:1、#include<stdlib.h>typedef int datattype;typedef struct node{char data;struct node *next;}linklist;main(){char ch;linklist *head,*s,*r,*p;head=malloc(sizeof(linklist));r=head;scanf("%c",&ch);while(ch!='$'){s=malloc(sizeof(linklist));s->data=ch;r->next=s;r=s;scanf("%c",&ch);}r->next=NULL;r=head->next;while(r!=NULL){printf("%c",r->data);r=r->next;}}2、#include "stdio.h"#include "stdlib.h"typedef struct node{int data;struct node *next;}linklist;main(){int x,y;linklist *head,*s,*r,*p,*q,*m,*n;clrscr();head=malloc(sizeof(linklist));r=head;printf("input the order numbers :");scanf("%d",&x);while(x!=0){s=malloc(sizeof(linklist));s->data=x;r->next=s;r=s;scanf("%d",&x);}r->next=NULL;printf("Please input the insert value:");scanf("%d",&y);p=head->next;while(p!=NULL){if (p->data<y) p=p->next;else break;}q=malloc(sizeof(linklist));q->data=y;m=head;while(m->next!=p) m=m->next; q->next=p;m->next=q;n=head->next;printf("the list are:");while(n!=NULL){printf("%3d",n->data);n=n->next;}}3、#include "stdio.h"#include "stdlib.h"typedef struct node{int data;struct node *next;}linklist;main(){int a;linklist *head,*s,*r,*p,*q,*t; clrscr();head=malloc(sizeof(linklist)); r=head;printf("Input some numbers:"); scanf("%d",&a);while(a!=0){s=malloc(sizeof(linklist)); s->data=a;r->next=s;r=s;scanf("%d",&a);}r->next=NULL;printf("\n The linklist before changed is:\n "); p=head->next;while(p){printf("%d",p->data);p=p->next;}p=head->next;q=p->next;while(q!=NULL){t=q->next;q->next=p;p=q;q=t;}head->next->next=NULL;head->next=p;printf("\nAfter changed:\n");p=head->next;while(p!=NULL){printf("%d",p->data);p=p->next;}}四、实验结果与分析(程序运行结果及其分析)1、输入:1 2 3 a b c $输出结果:1 2 3 a b c2、输入:input the order numbers : 1 3 5 7 8 9 0Please input the insert value::4 输出结果:the list are: 1 3 4 5 7 8 9 3、输入:Input some numbers:1 3 4 5 8 0输出结果:The linklist before changed is:13458After changed:85431五、实验体会(遇到问题及解决办法,编程后的心得体会)遇到问题:编写成功后运行时,没有加入$导致程序运行不成功,不能够退出。

相关文档
最新文档