数据结构实验报告全集
- 格式:doc
- 大小:301.50 KB
- 文档页数:33
数据结构实验报告-答案数据结构(C语言版)实验报告专业班级学号姓名实验1实验题目:单链表的插入和删除实验目的:了解和掌握线性表的逻辑结构和链式存储结构,掌握单链表的基本算法及相关的时间性能分析。
实验要求:建立一个数据域定义为字符串的单链表,在链表中不允许有重复的字符串;根据输入的字符串,先找到相应的结点,后删除之。
实验主要步骤:1、分析、理解给出的示例程序。
2、调试程序,并设计输入数据(如:bat,cat,eat,fat,hat,jat,lat,mat,#),测试程序的如下功能:不允许重复字符串的插入;根据输入的字符串,找到相应的结点并删除。
3、修改程序:(1)增加插入结点的功能。
(2)将建立链表的方法改为头插入法。
程序代码:#include“stdio.h“#include“string.h“#include“stdlib.h“#include“ctype. h“typedefstructnode//定义结点{chardata[10];//结点的数据域为字符串structnode*next;//结点的指针域}ListNode;typedefListNode*LinkList;//自定义LinkList单链表类型LinkListCreatListR1();//函数,用尾插入法建立带头结点的单链表LinkListCreatList(void);//函数,用头插入法建立带头结点的单链表ListNode*LocateNode();//函数,按值查找结点voidDeleteList();//函数,删除指定值的结点voidprintlist();//函数,打印链表中的所有值voidDeleteAll();//函数,删除所有结点,释放内存ListNode*AddNode();//修改程序:增加节点。
用头插法,返回头指针//==========主函数==============voidmain(){charch[10],num[5];LinkListhead;head=C reatList();//用头插入法建立单链表,返回头指针printlist(head);//遍历链表输出其值printf(“Deletenode(y/n):“);//输入“y“或“n“去选择是否删除结点scanf(“%s“,num);if(strcmp(num,“y“)==0||strcmp(num,“Y“)==0){printf(“PleaseinputDelete_data:“);scanf(“%s“,ch);//输入要删除的字符串DeleteList(head,ch);printlist(head);}printf(“Addnode?(y/n):“);//输入“y“或“n“去选择是否增加结点scanf(“%s“,num);if(strcmp(num,“y“)==0||strcmp(num,“Y“)==0){head=A ddNode(head);}printlist(head);DeleteAll(head);//删除所有结点,释放内存}//==========用尾插入法建立带头结点的单链表===========LinkListCreatListR1(void){charch[10];LinkListhead=(Li nkList)malloc(sizeof(ListNode));//生成头结点ListNode*s,*r,*pp;r=head;r->next=NULL;printf(“Input#toend“);//输入“#“代表输入结束printf(“\nPleaseinputN ode_data:“);scanf(“%s“,ch);//输入各结点的字符串while(strcmp(ch,“#“)!=0){pp=LocateNode(head,ch);//按值查找结点,返回结点指针if(pp==NULL){//没有重复的字符串,插入到链表中s=(ListNode*)malloc(sizeof(ListNode));strcpy(s->data,ch);r->next=s;r=s; r->next=NULL;}printf(“Input#toend“);printf(“PleaseinputNode_data:“);scanf(“%s“,ch);}returnhead;//返回头指针}//==========用头插入法建立带头结点的单链表===========LinkListCreatList(void){charch[100];LinkListhead,p;head =(LinkList)malloc(sizeof(ListNode));head->next=NULL;while(1){printf(“Input#toend“);printf(“PleaseinputNode_data:“);scanf(“%s“,ch);if(strcmp (ch,“#“)){if(LocateNode(head,ch)==NULL){strcpy(head->data,ch);p=(Li nkList)malloc(sizeof(ListNode));p->next=head;head=p;}}elsebreak;}retu rnhead;}//==========按值查找结点,找到则返回该结点的位置,否则返回NULL==========ListNode*LocateNode(LinkListhead,char*key){List Node*p=head->next;//从开始结点比较while(p!=NULL//扫描下一个结点returnp;//若p=NULL则查找失败,否则p指向找到的值为key的结点}//==========修改程序:增加节点=======ListNode*AddNode(LinkListhead){charch[10];ListNode*s,*pp ;printf(“\nPleaseinputaNewNode_data:“);scanf(“%s“,ch);//输入各结点的字符串pp=LocateNode(head,ch);//按值查找结点,返回结点指针printf(“ok2\n“);if(pp==NULL){//没有重复的字符串,插入到链表中s=(ListNode*)malloc(sizeof(ListNode));strcpy(s->data,ch);printf(“ok3\n“);s->next=head->next;head->next=s;}returnhead;}//==========删除带头结点的单链表中的指定结点=======voidDeleteList(LinkListhead,char*key){ListNode*p,*r,*q=hea d;p=LocateNode(head,key);//按key值查找结点的if(p==NULL){//若没有找到结点,退出printf(“positionerror”);exit(0);}while(q->next!=p)//p 为要删除的结点,q为p的前结点q=q->next;r=q->next;q->next=r->next;free(r);//释放结点}//===========打印链表=======voidprintlist(LinkListhead){ListNode*p=head->next;//从开始结点打印while(p){printf(“%s,“,p->data);p=p->next;}printf(“\n“);}//==========删除所有结点,释放空间===========voidDeleteAll(LinkListhead){ListNode*p=head,*r;while( p->next){r=p->next;free(p);p=r;}free(p);}实验结果:Input#toendPleaseinputNode_data:batInput#toendPleaseinputNode_data: catInput#toendPleaseinputNode_data:eatInput#toendPleaseinputNode_da ta:fatInput#toendPleaseinputNode_data:hatInput#toendPleaseinputNode_ data:jatInput#toendPleaseinputNode_data:latInput#toendPleaseinputNode _data:matInput#toendPleaseinputNode_data:#mat,lat,jat,hat,fat,eat,cat,bat ,Deletenode(y/n):yPleaseinputDelete_data:hatmat,lat,jat,fat,eat,cat,bat,Ins ertnode(y/n):yPleaseinputInsert_data:putposition:5mat,lat,jat,fat,eat,put,c at,bat,请按任意键继续...示意图:latjathatfateatcatbatmatNULLheadlatjathatfateatcatbatmatheadlatjatfateat putcatbatmatheadNULLNULL心得体会:本次实验使我们对链表的实质了解更加明确了,对链表的一些基本操作也更加熟练了。
数据结构实验报告2数据结构实验报告21、实验目的本次实验的目的是通过使用数据结构来解决一个特定的问题。
具体而言,我们将会使用某种数据结构(例如链表、堆栈、队列等)来实现一个特定功能,并对其性能进行评估。
2、实验背景在本次实验中,我们将会探索数据结构在解决实际问题中的应用。
数据结构是计算机科学的重要组成部分,它提供了一种组织和管理数据的方式,以便能够高效地访问和操作这些数据。
3、实验内容在本次实验中,我们选择了一种经典的数据结构,以实现一个特定的功能。
具体而言,我们将会使用链表来实现一个简单的联系人管理系统。
3.1 数据结构选择我们选择了链表作为联系人管理系统的数据结构。
链表是一种灵活的数据结构,它能够动态地增加或删除元素,并且支持高效的插入和删除操作。
3.2 实现功能我们的联系人管理系统将会具有以下功能:- 添加联系人:用户可以输入联系人的姓名、方式号码等信息,并将其添加到联系人列表中。
- 删除联系人:用户可以选择要删除的联系人,并从列表中删除该联系人。
- 查找联系人:用户可以根据姓名或方式号码来查找联系人,并显示相关信息。
- 显示所有联系人:系统将会将所有联系人按照姓名的字母顺序进行排序,并将其显示在屏幕上。
4、实验步骤下面是本次实验的具体步骤:4.1 初始化联系人管理系统在系统开始之前,我们需要初始化联系人管理系统。
这包括创建一个空的联系人列表,并提供用户菜单来选择相应功能。
4.2 添加联系人用户可以选择添加联系人的功能,并输入联系人的相关信息。
系统将会将联系人添加到联系人列表中。
4.3 删除联系人用户可以选择删除联系人的功能,并输入要删除联系人的姓名或方式号码。
系统将会在联系人列表中查找并删除相应联系人。
4.4 查找联系人用户可以选择查找联系人的功能,并输入要查找联系人的姓名或方式号码。
系统将会在联系人列表中查找相应联系人,并显示其相关信息。
4.5 显示所有联系人用户可以选择显示所有联系人的功能。
数据结构实验报告一数据结构实验报告一一、引言数据结构是计算机科学中非常重要的一门课程,它研究的是数据的组织、存储和管理方式。
在本次实验中,我们将学习并实践一些常用的数据结构,包括数组、链表和栈。
通过实验,我们将深入理解这些数据结构的原理和应用。
二、实验目的本次实验的目的是通过编写代码实现一些常用的数据结构,并测试它们的功能和性能。
通过实际操作,我们将掌握这些数据结构的基本操作和使用方法。
三、实验过程1. 数组数组是一种线性数据结构,它由一组连续的存储单元组成。
在本次实验中,我们将实现一个动态数组,它可以根据需要自动调整大小。
我们首先定义一个数组类,包含插入、删除和查找等基本操作。
然后,我们编写测试代码,验证数组的功能和性能。
2. 链表链表是另一种常用的数据结构,它由一系列节点组成,每个节点包含一个数据元素和一个指向下一个节点的指针。
在本次实验中,我们将实现一个单向链表。
我们首先定义一个节点类,然后定义一个链表类,包含插入、删除和查找等基本操作。
最后,我们编写测试代码,验证链表的功能和性能。
3. 栈栈是一种特殊的线性数据结构,它只能在一端进行插入和删除操作。
栈的特点是后进先出(LIFO)。
在本次实验中,我们将实现一个栈。
我们首先定义一个栈类,包含入栈、出栈和查看栈顶元素等基本操作。
然后,我们编写测试代码,验证栈的功能和性能。
四、实验结果通过实验,我们成功实现了动态数组、单向链表和栈的基本操作。
我们编写了测试代码,并对这些数据结构的功能和性能进行了验证。
实验结果表明,这些数据结构在不同场景下都有很好的表现,并且可以满足我们的需求。
五、实验总结本次实验让我们更加深入地理解了数据结构的原理和应用。
通过实际编写代码并进行测试,我们掌握了数组、链表和栈等常用数据结构的基本操作和使用方法。
实验过程中,我们遇到了一些问题,但通过不断的调试和优化,最终成功解决了这些问题。
通过本次实验,我们不仅提高了编程能力,也增强了对数据结构的理解和应用能力。
数据结构实验报告2一、实验目的本次数据结构实验旨在通过实际操作和编程实践,深入理解和掌握常见的数据结构,如链表、栈、队列、树等,并能够运用所学知识解决实际问题,提高编程能力和算法设计能力。
二、实验环境本次实验使用的编程语言为C++,开发环境为Visual Studio 2019。
三、实验内容(一)链表的实现与操作1、单向链表的创建首先,定义了链表节点的结构体,包含数据域和指向下一个节点的指针域。
然后,通过函数实现了单向链表的创建,从用户输入获取节点的数据,依次创建新节点并连接起来。
2、链表的遍历编写函数实现对单向链表的遍历,依次输出每个节点的数据。
3、链表的插入与删除实现了在指定位置插入节点和删除指定节点的功能。
插入操作时,需要找到插入位置的前一个节点,修改指针完成插入。
删除操作时,同样找到要删除节点的前一个节点,修改指针并释放删除节点的内存。
(二)栈的实现与应用1、栈的基本操作使用数组实现了栈的数据结构,包括入栈、出栈、判断栈空和获取栈顶元素等操作。
2、表达式求值利用栈来实现表达式求值的功能。
将表达式中的数字和运算符分别入栈,按照运算规则进行计算。
(三)队列的实现与应用1、队列的基本操作使用循环数组实现了队列,包括入队、出队、判断队空和队满等操作。
2、模拟银行排队系统通过创建队列来模拟银行客户的排队情况,实现客户的入队和出队操作,统计平均等待时间等。
(四)二叉树的遍历1、二叉树的创建采用递归的方式创建二叉树,用户输入节点数据,构建二叉树的结构。
2、先序、中序和后序遍历分别实现了二叉树的先序遍历、中序遍历和后序遍历,并输出遍历结果。
四、实验结果与分析(一)链表实验结果成功创建、遍历、插入和删除单向链表。
通过对链表的操作,深入理解了链表的动态存储特性和指针的运用。
在插入和删除操作中,能够正确处理指针的修改和内存的释放,避免了内存泄漏和指针错误。
(二)栈实验结果栈的基本操作运行正常,能够正确实现入栈、出栈等功能。
第一章链表的应用线性表是数据结构中最简单、最常用的一种线性结构,也是学习数据结构全部内容的基础,其掌握的好坏直接影响着后继课程的学习。
线性表的顺序存储结构,即顺序表的概念相对比较简单,因此,本章的主要任务是使用有关单链表的操作来实现通讯录信息系统的管理。
1.1设计要求本章的设计实验要求使用有关链表的操作来实现通讯录信息系统的管理。
为了验证算法,通讯录管理包括单通讯录链表的建立、通讯者的插入、通讯者的删除、通讯者的查询及通讯录表的输出等。
主控菜单的设计要求使用数字0—5来选择菜单项,其他输入则不起作用。
程序运行后,给出6个菜单项的内容和输入提示:1.通讯录链表的建立2. 通讯者结点的插入3. 通讯者结点的查询4. 通讯者结点的删除5. 通讯录链表的输出0. 退出管理系统请选择0—5:1.2设计分析1.2.1主控菜单函数设计分析1.实现循环和功能选择首先编写一个主控菜单驱动程序,输入0—5以进入相应选择项。
假设输入选择用变量sn存储,它作为menu_select函数的返回值给switch语句。
使用for循环实现重复选择,并在主函数main()中实现。
实际使用时,只有选择大于5或小于0的值,程序才能结束运行,这就要使用循环控制。
这里使用for循环语句实现菜单的循环选择,为了结束程序的运行,使用了“return”语句,也可以使用“exit(0);”语句。
2.得到sn的合理值如前所述,应该设计一个函数用来输出提示信息和处理输入,这个函数应该返回一个数值sn,以便供给switch语句使用。
假设函数名为menu_select,对于sn的输入值,在switch 中case语句对应数字1—5,对于不符合要求的输入,提示输入错误并要求重新输入。
将该函数与主函数合在一起,编译运行程序,即可检查并验证菜单选择是否正确。
1.2.2功能函数设计分析1.建立通讯录链表的设计这里实际上是要求建立一个带头结点的单链表。
建立单链表有两种方法,一种称之为头插法,另一种称为尾插法。
实验报告题目数据结构实验学生姓名学号系部专业班级指导教师二〇一〇年十二月实验1:顺序表实验一、实验目的:1.学会定义线性表的顺序存储类型,实现C程序的基本结构对线性表的一些基本操作和具体的函数定义。
2.掌握顺序表的基本操作,实现顺序表的插入,删除,查找基本运算。
3.掌握对于多函数程序的输入,编辑,调试和运算过程。
二、实验要求:1.预习C语言中结构体的定义和基本的操作方法。
2.对顺序表每个基本操作用一个单独函数实现。
3.编写完整程序完成下面实验内容并且上机运行。
三、实验内容:编写完整程序完成下面基本操作并且上机运行1.初始化顺序表La;2.将顺序表La设置为空表;3.测试顺序表La是否上空表;4.在顺序表La插入一个新元素;5.删除顺序表La中某个元素;6.在顺序表La中查找某个元素,查找成功,返回位序,否则返回0;7.建立顺序表La;8.打印顺序表La所有元素;10.输入n个元素建立顺序表La;11.归并非递减表La和Lb成为非递减表Lc。
要求编写一个主菜单调用上面各个基本操作。
四、程序体现:#include<stdio.h>#include <conio.h>#include <stdlib.h>#define LIST_INIT_SIZE 10#define LISTINCREMENT 3#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define OVERFLOW -2#define Null 0typedef int status;typedef int elemtype;typedef struct {int *elem;int length;int listsize;}sqlist;status InitList(sqlist &L){L.elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));if(!L.elem)exit(OVERFLOW);L.length=10;L.listsize=LIST_INIT_SIZE;return OK;}status ClearList(sqlist &L){L.elem=Null;return OK;}status TestList(sqlist &L){if(L.elem=Null)return TRUE;elsereturn FALSE;}status ListInsert(sqlist &L,int i,int e){printf("经修改后,链表为:");int *p,*q;if(i<1||i>L.length+1)return ERROR;if(L.length>=L.listsize){int *newbase;newbase=(int *)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(int));if(!newbase)exit(OVERFLOW);L.elem=newbase;L.listsize+=LISTINCREMENT;}q=&(L.elem[i-1]);for(p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;*q=e;++L.length;return OK;}status ListDelete(sqlist &L,int i,elemtype &e){ elemtype *q, *p;if((i<1)||(i>L.length))return ERROR;p=&(L.elem[i-1]);e=*p;q=L.elem+L.length-1;for(++p;p<=q;++p)*(p-1)=*p;--L.length;return OK;}int LocateElem(sqlist L,int e){int i = 0;for (i = 0; i < L.length; i++){if (L.elem[i] == e)return i + 1;}return FALSE;}void MergeList(sqlist L1,sqlist L2,sqlist &L3){printf("经合并后的新表为:");int *pa,*pb,*pc,*pa_last,*pb_last;pa=L1.elem;pb=L2.elem;L3.listsize=L3.length=L1.length+L2.length;pc=L3.elem=(int *)malloc(L3.listsize*sizeof(int));if(!L3.elem)exit(OVERFLOW);pa_last=L1.elem+L1.length-1;pb_last=L2.elem+L2.length-1;while(pa<=pa_last&&pb<=pb_last){if(*pa<=*pb)*pc++=*pa++;else *pc++=*pb++;}while(pa<=pa_last)*pc++=*pa++;while(pb<=pb_last)*pc++=*pb++;}void main(){sqlist La,Lb,Lc;int i,j,m,n,p,q,s,r;printf("创建一个新的线性表,请输入十个数字:");InitList(La);for(i=0;i<LIST_INIT_SIZE;i++)scanf("%d",&La.elem[i]);for(i=0;i<LIST_INIT_SIZE;i++)printf("%d ",La.elem[i]);printf("\n");printf("现插入一个数据,请输入它的位数和大小:");int a,b;scanf("%d%d",&a,&b);ListInsert(La,a,b);for(s=0;s<La.length;s++)printf("%d ",La.elem[s]);printf("\n");printf("现删除一个数据,请输入它的位数和大小:");int c,d;scanf("%d%d",&c,&d);ListDelete(La,c,d);for(j=0;j<La.length;j++)printf("%d ",La.elem[j]);printf("\n");printf("现查找一个数据,请输入它的位数:");int e;scanf("%d",&e);n=LocateElem(La,e);printf("n=%d",n);printf("再次创建一个新表.");InitList(Lb);for(q=0;q<LIST_INIT_SIZE;q++)scanf("%d ",&Lb.elem[q]);printf("\n");printf("现将两个线性表进行合并...");printf("\n");MergeList(La,Lb,Lc);for(r=0;r<2*LIST_INIT_SIZE;r++)printf("%d ",Lc.elem[r]);printf("\n");printf("测试线性表La是否为空,如果返回值为1,则为空:");m=TestList(La);printf("m=%d",m);printf("\n");printf("现将线性表La置为空,如果返回值为1,则置空成功.");p=ClearList(La);printf("p=%d",p);printf("\n");printf("The End!");}实验2:单链表实验一、实验目的:1.学会定义线性表的链表存储类型,实现C程序的基本结构对线性表的一些基本操作和具体的函数定义。
一、实验目的本次实验旨在让学生掌握数据结构的基本概念、逻辑结构、存储结构以及各种基本操作,并通过实际编程操作,加深对数据结构理论知识的理解,提高编程能力和算法设计能力。
二、实验内容1. 线性表(1)顺序表1)初始化顺序表2)向顺序表插入元素3)从顺序表删除元素4)查找顺序表中的元素5)顺序表的逆序操作(2)链表1)创建链表2)在链表中插入元素3)在链表中删除元素4)查找链表中的元素5)链表的逆序操作2. 栈与队列(1)栈1)栈的初始化2)入栈操作3)出栈操作4)获取栈顶元素5)判断栈是否为空(2)队列1)队列的初始化2)入队操作3)出队操作4)获取队首元素5)判断队列是否为空3. 树与图(1)二叉树1)创建二叉树2)遍历二叉树(前序、中序、后序)3)求二叉树的深度4)求二叉树的宽度5)二叉树的镜像(2)图1)创建图2)图的深度优先遍历3)图的广度优先遍历4)最小生成树5)最短路径三、实验过程1. 线性表(1)顺序表1)初始化顺序表:创建一个长度为10的顺序表,初始化为空。
2)向顺序表插入元素:在顺序表的第i个位置插入元素x。
3)从顺序表删除元素:从顺序表中删除第i个位置的元素。
4)查找顺序表中的元素:在顺序表中查找元素x。
5)顺序表的逆序操作:将顺序表中的元素逆序排列。
(2)链表1)创建链表:创建一个带头结点的循环链表。
2)在链表中插入元素:在链表的第i个位置插入元素x。
3)在链表中删除元素:从链表中删除第i个位置的元素。
4)查找链表中的元素:在链表中查找元素x。
5)链表的逆序操作:将链表中的元素逆序排列。
2. 栈与队列(1)栈1)栈的初始化:创建一个栈,初始化为空。
2)入栈操作:将元素x压入栈中。
3)出栈操作:从栈中弹出元素。
4)获取栈顶元素:获取栈顶元素。
5)判断栈是否为空:判断栈是否为空。
(2)队列1)队列的初始化:创建一个队列,初始化为空。
2)入队操作:将元素x入队。
3)出队操作:从队列中出队元素。
数据结构实验报告课程数据结构 _ 院系专业班级实验地点姓名学号实验时间指导老师数据结构上机实验报告1一﹑实验名称:实验一——链表二﹑实验目的:1.了解线性表的逻辑结构特性;2.熟悉链表的基本运算在顺序存储结构上的实现,熟练掌握链式存储结构的描述方法;3.掌握链表的基本操作(建表、插入、删除等)4. 掌握循环链表的概念,加深对链表的本质的理解。
5.掌握运用上机调试链表的基本方法三﹑实验内容:(1)创建一个链表(2)在链表中插入元素(3)在链表中删除一个元素(4)销毁链表四﹑实验步骤与程序#include <iostream.h>#include <malloc.h>typedef struct LNode{int data;struct LNode *next;}Lnode, *LinkList;//假设下面的链表均为带头结点。
void CreatLinkList(LinkList &L,int j){//建立一个链表L,数据为整数,数据由键盘随机输入。
LinkList p,q;L=(LinkList )malloc(sizeof(Lnode));L->next=NULL;q=L;cout<<"请输入一个链表:"<<endl;for(int i=0;i<j;i++){ p=(LinkList)malloc(sizeof(Lnode));cin>>p->data;p->next=q->next;q->next=p;q=p;}}int PrintLinkList(LinkList &L){//输出链表L的数据元素LinkList p;p=L->next;if(L->next==NULL){cout<<"链表没有元素!"<<endl;return 0;}cout<<"链表的数据元素为:";while(p){cout<<p->data<<" ";p=p->next;}cout<<endl;return 1;}void LinkListLengh(LinkList &L){//计算链表L的数据元素个数。
深 圳 大 学 实 验 报 告课程名称: 数据结构实验与课程设计 实验项目名称: 实验一:顺序表的应用 学院: 计算机与软件学院 专业: 指导教师: **报告人: 文成 学号: ********** 班级: 5 实验时间: 2012-9-17实验报告提交时间: 2012-9-24教务部制一、实验目的与要求:目的:1.掌握线性表的基本原理2.掌握线性表地基本结构3.掌握线性表地创建、插入、删除、查找的实现方法要求:1.熟悉C++语言编程2.熟练使用C++语言实现线性表地创建、插入、删除、查找的实现方法二、实验内容:Problem A: 数据结构——实验1——顺序表例程Description实现顺序表的创建、插入、删除、查找Input第一行输入顺序表的实际长度n第二行输入n个数据第三行输入要插入的新数据和插入位置第四行输入要删除的位置第五行输入要查找的位置Output第一行输出创建后,顺序表内的所有数据,数据之间用空格隔开第二行输出执行插入操作后,顺序表内的所有数据,数据之间用空格隔开第三行输出执行删除操作后,顺序表内的所有数据,数据之间用空格隔开第四行输出指定位置的数据Sample Input611 22 33 44 55 66888 352Sample Output11 22 33 44 55 6611 22 888 33 44 55 6611 22 888 33 55 6622HINT第i个位置是指从首个元素开始数起的第i个位置,对应数组内下标为i-1的位置Problem B: 数据结构——实验1——顺序表的数据交换Description实现顺序表内的元素交换操作Input第一行输入n表示顺序表包含的·n个数据第二行输入n个数据,数据是小于100的正整数第三行输入两个参数,表示要交换的两个位置第四行输入两个参数,表示要交换的两个位置Output第一行输出创建后,顺序表内的所有数据,数据之间用空格隔开第二行输出执行第一次交换操作后,顺序表内的所有数据,数据之间用空格隔开第三行输出执行第二次交换操作后,顺序表内的所有数据,数据之间用空格隔开注意加入交换位置的合法性检查,如果发现位置不合法,输出error。
数据结构实验报告(实验)数据结构实验报告(实验)1. 实验目的1.1 理解数据结构的基本概念和操作1.2 学会使用数据结构解决实际问题1.3 掌握常用数据结构的实现和应用2. 实验环境2.1 操作系统:Windows 102.2 编程语言:C++2.3 开发工具:Visual Studio3. 实验内容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 实现栈和队列的应用场景3.2.4 比较栈和队列的优缺点3.3 实验三:树的实现和应用3.3.1 设计并实现二叉树的基本操作函数3.3.2 实现二叉树的创建、遍历和查找等功能3.3.3 实现树的遍历算法(前序、中序、后序遍历)3.3.4 应用树解决实际问题4. 数据结构实验结果4.1 实验一的结果4.1.1 线性表的基本操作函数实现情况4.1.2 线性表的插入、删除、查找功能测试结果4.1.3 线性表的排序算法测试结果4.1.4 线性表解决实际问题的应用效果4.2 实验二的结果4.2.1 栈的基本操作函数实现情况4.2.2 队列的基本操作函数实现情况4.2.3 栈和队列的应用场景测试结果4.2.4 栈和队列优缺点的比较结果4.3 实验三的结果4.3.1 二叉树的基本操作函数实现情况4.3.2 二叉树的创建、遍历和查找功能测试结果 4.3.3 树的遍历算法测试结果4.3.4 树解决实际问题的应用效果5. 实验分析与总结5.1 实验问题与解决方案5.2 实验结果分析5.3 实验总结与心得体会6. 附件附件一:实验源代码附件二:实验数据7. 法律名词及注释7.1 版权:著作权法规定的对原创作品享有的权利7.2 专利:国家授予的在一定时间内对新型发明享有独占权利的证书7.3 商标:作为标识企业商品和服务来源的标志的名称、符号、图案等7.4 许可协议:指允许他人在一定条件下使用自己的知识产权的协议。
数据结构课程实验报告目录1. 实验简介1.1 实验背景1.2 实验目的1.3 实验内容2. 实验方法2.1 数据结构选择2.2 算法设计2.3 程序实现3. 实验结果分析3.1 数据结构性能分析3.2 算法效率比较3.3 实验结论4. 实验总结1. 实验简介1.1 实验背景本实验是数据结构课程的一次实践性操作,旨在帮助学生加深对数据结构的理解和运用。
1.2 实验目的通过本实验,学生将学会如何选择合适的数据结构来解决特定问题,了解数据结构与算法设计的关系并能将其应用到实际问题中。
1.3 实验内容本实验将涉及对一些经典数据结构的使用,如链表、栈、队列等,并结合具体问题进行算法设计和实现。
2. 实验方法2.1 数据结构选择在实验过程中,需要根据具体问题选择合适的数据结构,比如针对需要频繁插入删除操作的情况可选择链表。
2.2 算法设计针对每个问题,需要设计相应的算法来实现功能,要考虑算法的效率和实际应用情况。
2.3 程序实现根据算法设计,编写相应的程序来实现功能,并进行调试测试确保程序能够正确运行。
3. 实验结果分析3.1 数据结构性能分析在实验过程中,可以通过对不同数据结构的使用进行性能分析,如时间复杂度和空间复杂度等,以便选择最优的数据结构。
3.2 算法效率比较实验完成后,可以对不同算法在同一数据结构下的效率进行比较分析,找出最优算法。
3.3 实验结论根据实验结果分析,得出结论并总结经验教训,为后续的数据结构和算法设计提供参考。
4. 实验总结通过本次实验,学生将对数据结构与算法设计有更深入的了解,并能将所学知识应用到实际问题中,提高自己的实践能力和解决问题的能力。
数据结构实验一:线性表实验报告#include <string.h>#include <ctype.h>#include <malloc.h> // malloc()等#include <limits.h> // INT_MAX等#include <stdio.h> // EOF(=^Z或F6),NULL#include <stdlib.h> // atoi()#include <io.h> // eof()#include <math.h> // floor(),ceil(),abs()#include <process.h> // exi t()#include <iostream.h> // cout,cin// 函数结果状态代码#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1// #define OVERFLOW -2 因为在math.h中已定义OVERFLOW的值为3,故去掉此行typedef int Status; // Status是函数的类型,其值是函数结果状态代码,如OK等typedef int Boolean; // Boolean是布尔类型,其值是TRUE或FALSEtypedef int ElemType;#define LIST_INIT_SIZE 10 // 线性表存储空间的初始分配量#define LISTINCREMENT 2 // 线性表存储空间的分配增量struct SqListElemType *elem; // 存储空间基址int length; // 当前长度int listsize; // 当前分配的存储容量(以sizeof(ElemType)为单位)};/**********************************************************/ /* 顺序表示的线性表的基本操作(12个) *//**********************************************************/ Status InitList(SqList &L){ // 操作结果:构造一个空的顺序线性表---------------1L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));if(!L.elem)exit(OVERFLOW); // 存储分配失败L.length=0; // 空表长度为0L.listsize=LIST_INIT_SIZE; // 初始存储容量return OK;}Status DestroyList(SqList &L){ // 初始条件:顺序线性表L已存在。
国开数据结构(本)数据结构课程实验报告一、实验目的本实验旨在帮助学生掌握数据结构的基本概念,熟练掌握数据结构的基本操作,进一步提高学生的编程能力和数据处理能力。
二、实验内容1. 数据结构的基本概念在实验中,我们首先介绍了数据结构的基本概念,包括数据的逻辑结构和物理结构,以及数据结构的分类和应用场景。
2. 数据结构的基本操作接着,我们介绍了数据结构的基本操作,包括插入、删除、查找等操作,通过具体的案例和代码演示,让学生理解和掌握这些基本操作的实现原理和方法。
3. 编程实践在实验的第三部分,我们组织学生进行数据结构的编程实践,要求学生通过实际编写代码来实现各种数据结构的基本操作,加深对数据结构的理解和掌握。
三、实验过程1. 数据结构的基本概念在本部分,我们通过课堂讲解和案例分析的方式,向学生介绍了数据结构的基本概念,包括线性结构、树形结构、图形结构等,让学生对数据结构有一个整体的认识。
2. 数据结构的基本操作在这一部分,我们通过具体的案例和代码演示,向学生介绍了数据结构的基本操作,包括插入、删除、查找等操作的实现原理和方法,让学生掌握这些基本操作的具体实现。
3. 编程实践最后,我们组织学生进行数据结构的编程实践,要求他们通过实际编写代码来实现各种数据结构的基本操作,加深对数据结构的理解和掌握,同时也提高了他们的编程能力和数据处理能力。
四、实验结果与分析通过本次实验,学生们对数据结构有了更深入的理解和掌握,他们能够熟练地使用各种数据结构的基本操作,编写出高效、稳定的代码,提高了他们的编程能力和数据处理能力。
五、实验总结本实验对于学生掌握数据结构的基本概念和操作起到了很好的辅助作用,通过实际的编程实践,学生们不仅加深了对数据结构的理解和掌握,同时也提高了他们的编程能力和数据处理能力。
这对于他们今后的学习和工作都具有重要的意义。
六、参考文献1. 《数据结构与算法分析》2. 《数据结构(C语言版)》3. 《数据结构与算法》以上是我对“国开数据结构(本)数据结构课程实验报告”的详细报告,希望能够满足您的要求。
数据结构实验报告实验5一、实验目的本次实验的主要目的是深入理解和掌握常见的数据结构,通过实际编程实现和操作,提高对数据结构的应用能力和编程技巧。
二、实验环境本次实验使用的编程语言为C++,开发工具为Visual Studio 2019。
三、实验内容1、线性表的基本操作实现线性表的创建、插入、删除、查找等基本操作。
对不同操作的时间复杂度进行分析和比较。
2、栈和队列的应用利用栈实现表达式求值。
使用队列模拟银行排队系统。
3、二叉树的遍历实现二叉树的先序、中序、后序遍历算法。
分析不同遍历算法的特点和应用场景。
4、图的表示和遍历采用邻接矩阵和邻接表两种方式表示图。
实现图的深度优先遍历和广度优先遍历算法。
四、实验步骤及结果1、线性表的基本操作首先,定义了一个线性表的结构体,包含数据域和指针域。
创建线性表时,动态分配内存空间,并初始化表头和表尾指针。
插入操作分为表头插入、表尾插入和指定位置插入。
在指定位置插入时,需要先找到插入点的前一个节点,然后进行插入操作。
删除操作同样需要找到要删除节点的前一个节点,然后释放删除节点的内存空间,并调整指针。
查找操作通过遍历线性表,逐个比较数据值来实现。
经过测试,不同操作的时间复杂度如下:创建操作的时间复杂度为 O(1)。
插入操作在表头和表尾插入的时间复杂度为 O(1),在指定位置插入的时间复杂度为 O(n)。
删除操作的时间复杂度为 O(n)。
查找操作的平均时间复杂度为 O(n)。
2、栈和队列的应用表达式求值:将表达式转换为后缀表达式,然后利用栈进行计算。
遇到操作数则入栈,遇到操作符则从栈中弹出两个操作数进行计算,并将结果入栈。
最后栈顶元素即为表达式的结果。
银行排队系统:使用队列模拟客户的排队过程。
客户到达时入队,服务窗口空闲时从队列头部取出客户进行服务。
实验结果表明,栈和队列能够有效地解决相关问题,提高程序的效率和可读性。
3、二叉树的遍历先序遍历:先访问根节点,然后递归遍历左子树,最后递归遍历右子树。
本科生实验报告实验课程数据结构学院名称专业名称学生姓名学生学号指导教师实验地点实验成绩二〇二〇年六月二〇二〇年七月填写说明1、适用于本科生所有的实验报告(印制实验报告册除外);2、专业填写为专业全称,有专业方向的用小括号标明;3、格式要求:①用A4纸双面打印(封面双面打印)或在A4大小纸上用蓝黑色水笔书写。
②打印排版:正文用宋体小四号,1.5倍行距,页边距采取默认形式(上下2.54cm,左右2.54cm,页眉1.5cm,页脚1.75cm)。
字符间距为默认值(缩放100%,间距:标准);页码用小五号字底端居中。
③具体要求:题目(二号黑体居中);摘要(“摘要”二字用小二号黑体居中,隔行书写摘要的文字部分,小4号宋体);关键词(隔行顶格书写“关键词”三字,提炼3-5个关键词,用分号隔开,小4号黑体);正文部分采用三级标题;第1章××(小二号黑体居中,段前0.5行)1.1 ×××××小三号黑体×××××(段前、段后0.5行)1.1.1小四号黑体(段前、段后0.5行)参考文献(黑体小二号居中,段前0.5行),参考文献用五号宋体,参照《参考文献著录规则(GB/T 7714-2005)》。
实验一线性表的应用一、实验目的:1.掌握线性表的逻辑结果和存储结构特点;2.掌握线性表的基本操作,如建立、查找、插入和删除等。
二、问题描述创建一个班级学生信息表,包含“学号、姓名、性别、成绩”等信息。
具有如下功能:(1) 根据指定学生个数,逐个输入学生信息;(2) 逐个显示学生表中所有学生的相关信息;(3) 根据学号进行查找,返回此学生的学号和成绩;(4) 给定一个学生信息,插入到表中指定的位置;(5) 删除指定位置的学生记录;三、数据结构设计(选用的数据元素逻辑结构和存储结构实现形式说明)(1)逻辑结构设计:采用的线性结构,主要通过线性表实现各元素之间一对一的关系(2)存储结构设计:采用顺序存储结构,顺序存储结构较为方便,直接在空间开辟一处存储空间存放数据,创建顺序表较简单,但是在插入和删除时效率明显较低。
数据结构实验报告1.引言1.1 问题背景在计算机科学领域中,数据结构是研究和操作数据的一种方式。
它涉及到如何组织和存储数据,以便能够高效地检索和修改。
1.2 实验目的本实验旨在让学生深入了解一些常见的数据结构,并通过实践掌握它们的实际应用。
具体实验目的如下:________1) 熟悉线性数据结构,如数组、链表和栈。
2) 熟悉非线性数据结构,如树和图。
3) 学习并实现一些常见的数据结构算法,如排序和搜索算法。
4) 测试和分析数据结构的性能。
2.线性数据结构2.1 数组a. 定义和用途数组是一种线性数据结构,由相同类型的元素组成,并通过索引访问。
它被广泛应用于存储和访问大量数据的场景。
b. 实验要求在此实验中,我们将实现一个简单的整数数组,并提供一些基本的操作,如插入、删除和查找。
2.2 链表a. 定义和用途链表是一种线性数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。
它可以灵活地分配内存,并且插入和删除操作比数组更高效。
b. 实验要求在此实验中,我们将实现一个单链表,并提供一些基本的操作,如插入、删除和查找。
2.3 栈a. 定义和用途栈是一种特殊的线性数据结构,遵循后进先出(LIFO)的原则。
它可以用于处理函数调用、表达式求值和追踪程序执行等场景。
b. 实验要求在此实验中,我们将实现一个简单的栈,并提供一些基本的操作,如压栈、出栈和查看栈顶元素。
3.非线性数据结构3.1 树a. 定义和用途树是一种非线性数据结构,由一组节点组成,通过边连接起来。
它常用于模拟分层结构和组织数据。
b. 实验要求在此实验中,我们将实现一个二叉树,并提供一些基本的操作,如插入、删除和查找。
3.2 图a. 定义和用途图是一种非线性数据结构,由一组节点和连接这些节点的边组成。
它可以用于建模网络、社交关系、路径查找等问题。
b. 实验要求在此实验中,我们将实现一个简单的图,并提供一些基本的操作,如添加节点、添加边和查找路径。
数据结构实验报告全集实验一线性表基本操作和简单程序1.实验目的(1)掌握使用Visual C++ 6.0上机调试程序的基本方法;(2)掌握线性表的基本操作:初始化、插入、删除、取数据元素等运算在顺序存储结构和链表存储结构上的程序设计方法。
2.实验要求(1)认真阅读和掌握和本实验相关的教材内容。
(2)认真阅读和掌握本章相关内容的程序。
(3)上机运行程序。
(4)保存和打印出程序的运行结果,并结合程序进行分析。
(5)按照你对线性表的操作需要,重新改写主程序并运行,打印出文件清单和运行结果实验代码:1)头文件模块#include iostream.h>//头文件#include<malloc.h>//库头文件-----动态分配内存空间typedef int elemtype;//定义数据域的类型typedef struct linknode//定义结点类型{elemtype data;//定义数据域struct linknode *next;//定义结点指针}nodetype;2)创建单链表nodetype *create()//建立单链表,由用户输入各结点data域之值,//以0表示输入结束{elemtype d;//定义数据元素dnodetype *h=NULL,*s,*t;//定义结点指针int i=1;cout<<"建立一个单链表"<<endl;while(1){cout <<" 输入第"<< i <<"结点data域值:";cin >> d;if(d==0) break;//以0表示输入结束if(i==1)//建立第一个结点{h=(nodetype*)malloc(sizeof(nodetype));//表示指针hh->data=d;h->next=NULL;t=h;//h是头指针}else//建立其余结点{s=(nodetype*) malloc(sizeof(nodetype));s->data=d;s->next=NULL;t->next=s;t=s;//t始终指向生成的单链表的最后一个节点}i++;}return h;}3)输出单链表中的元素void disp(nodetype*h)//输出由h指向的单链表的所有data域之值{nodetype *p=h;cout<<"输出一个单链表:"<<endl<<" ";if(p==NULL)cout<<"空表";while(p!=NULL){cout<<p->data<<" ";p=p->next;}cout<<endl;}4)计算单链表的长度int len(nodetype *h)//返回单链表的长度{int i=0;nodetype *p=h;while(p!=NULL){p=p->next;i++;}return i;}5)寻找第i个节点nodetype *find(nodetype *h,int i)//返回第i个节点的指针{nodetype *p=h;int j=1;if(i>len(h)||i<=0)return NULL;//i上溢或下溢celse{while (p!=NULL&&j<1)//查找第i个节点,并由p指向该节点{j++;p=p->next;}return p;} }6)单链表的插入操作nodetype *ins(nodetype *h,int i,elemtype x)//在单链表head中第i个节点//(i>=0)之后插入一个data域为x的节点{nodetype *p,*s;s=(nodetype*)malloc(sizeof(nodetype));//创建节点ss->data=x;s->next=NULL;if(i==0)//i=0:s作为该单链表的第一个节点{s->next=h;h=s;}else{p=find(h,i);//查找第i个节点,并由p指向该节点if(p!=NULL){s->next=p->next;p->next=s;}return h;}}7)单链表的删除操作nodetype *del(nodetype *h,int i)//删除第i个节点{nodetype *p=h, *s;int j=1;if(i==1)//删除第1个节点{h=h->next;free(p);}else{p=find(h,i-1);//查找第i-1个节点,并由p指向该节点 if(p!=NULL&&p->next!=NULL){s=p->next;//s指向要删除的节点p->next=s->next;free(s);}else cout<<"输入i的值不正确"<<endl;}return h;}8)释放节点空间void dispose(nodetype *h)//释放单链表的所有节点占用的空间{nodetype *pa=h,*pb;if(pa!=NULL){pb=pa->next;if(pb==NULL)//只有一个节点的情况free(pa);else{while (pb!=NULL)//有两个及以上节点的情况{free(pa);pa=pb;pb=pb->next;}free(pa);}}}9)主程序模块:#include"slink.h"//包含头文件slinkvoid main(){nodetype *head;//定义节点指针变量head=create();//创建一个单链表disp(head);//输出单链表cout<<"单链表长度:"<<len(head)<<endl;ins(head, 2,0);//在第二个节点之后插入以0为元素的节点 disp(head);//输出新链表del(head,2);//删除第二个节点disp(head);//输出新链表}5.实验结果建立一个单链表:输入第1结点data域值:1输入第2结点data域值:2输入第3结点data域值:3输入第4结点data域值:4输入第5结点data域值:5输入第6结点data域值:6输入第7结点data域值:7输入第8结点data域值:8输入第9结点data域值:9输入第10结点data域值0:输出一个单链表:1 2 3 4 5 6 7 8 9单链表长度:9输出一个单链表:1 02345678 9输出一个单链表:1 2 3 4 5 6 7 8实验二顺序栈的实现1.实验目的掌握顺序栈的基本操作:初始化栈、判栈空否、入栈、出栈、取栈顶数据元素等运算以及程序实现方法。
2.实验要求(1)认真阅读和掌握和本实验相关的教材内容。
(2)分析问题的要求,编写和调试完成程序。
(3)保存和打印出程序的运行结果,并分析程序的运行结果。
3.实验内容利用栈的基本操作实现一个判断算术表达式中包含圆括号、方括号是否正确配对的程序。
具体完成如下:(1)定义栈的顺序存取结构。
(2)分别定义顺序栈的基本操作(初始化栈、判栈空否、入栈、出栈等)。
(3)定义一个函数用来判断算术表达式中包含圆括号、方括号是否正确配对。
其中,括号配对共有四种情况:左右括号配对次序不正确;右括号多于左括号;左括号多于右括号;左右括号匹配正确。
(4)设计一个测试主函数进行测试。
(5)对程序的运行结果进行分析。
实验代码:#include <stdio.h >#define MaxSize 100typedef struct{int data[MaxSize];int top;}SqStack;void InitStack(SqStack *st) //初始化栈{st->top=-1;}int StackEmpty(SqStack *st) //判断栈为空{return (st->top==-1);}void Push(SqStack *st,int x) //元素进栈{if(st->top==MaxSize-1)printf("栈上溢出!\n");else{st->top++;st->data[st->top]=x;}}void Pop(SqStack *st) //退栈{if(st->top==-1)printf("栈下溢出\n");elsest->top--;}int Gettop(SqStack *st) //获得栈顶元素{if(st->top==-1){printf("栈空\n");return 0;}elsereturn st->data[st->top]; }void Display(SqStack *st) //打印栈里元素{int i;printf("栈中元素:");for(i=st->top;i>=0;--i)printf("%d ",st->data[i]);printf("\n");}int main() //测试{SqStack L;SqStack *st=&L;InitStack(st);printf("栈空:%d\n",StackEmpty(st));for(int i=1;i<10;++i)Push(st,i);Display(st);printf("退一次栈\n");Pop(st);printf("栈顶元素:%d\n",Gettop(st));Pop(st);Display(st);return 0;}实验结果:实验三串的基本操作和简程序1.实验目的掌握串基本操作:初始化、联接、替换、子串等运算在堆分配存储储结构上的程序设计方法。
2.实验要求(1)认真阅读和掌握和本实验相关的教材内容。
(2)认真阅读和掌握本章相关内容的算法并设计程序序。
(3)上机运行程序。
(4)保存和打印出程序的运行结果,并结合程序进行分析。
实验代码:#include<stdio.h>#define MaxSize 50typedef struct{char data[MaxSize]; //存放字符串int length; //字符串长度}SqString;//将一个字符串常量赋给串svoid StrAssign(SqString &s,char cstr[]){int i;for(i=0;cstr[i]!='\0';i++) //这个'\0'代表字符串结束标志,编译系统自动加上的s.data[i]=cstr[i];s.length=i;}//字符串的复制void StrCopy(SqString &s,SqString t) {int i;for(i=0;i<t.length;i++)s.data[i]=t.data[i];s.length=t.length;printf("字符串复制成功了\n");}//判断字符串是否相等void StrEqual(SqString s,SqString t) {int i,same=1;if(s.length!=t.length)same=0;else{for(i=0;i<s.length;i++)if(s.data[i]!=t.data[i]){same=0;break;}}if(same==0)printf("这两个字符串不相等\n");elseprintf("这两个字符串相等\n");}//字符串的长度void StrLength(SqString s){printf("此字符串长度为:%d\n",s.length); }//合并字符串SqString Concat(SqString s,SqString t) {SqString str;int i;str.length=s.length+t.length;for(i=0;i<s.length;i++)str.data[i]=s.data[i];for(i=0;i<t.length;i++)str.data[s.length+i]=t.data[i];return str;}//求子字符串void SubStr(SqString s,int i,int j){SqString str;int k;str.length=0;if(i<=0||i>s.length||j<0||i+j-1>s.length)printf("子字符串复制失败\n");for(k=i-1;k<i+j-1;k++)str.data[k-i+1]=s.data[k];str.length=j;printf("子字符串复制成功长度为:%d\n",j);printf("下面输出此子字符串:\n");for(i=0;i<j;i++)printf("%c",str.data[i]);printf("\n");}//插入字符串SqString InserStr(SqString s1,int i,SqString s2){int j;SqString str;str.length=0;if(i<=0||i>s1.length+1){printf("字符串插入失败\n");return str;}for(j=0;j<i-1;j++)str.data[j]=s1.data[j];for(j=0;j<s2.length;j++)str.data[i-1+j]=s2.data[j];for(j=i-1;j<s1.length;j++)str.data[s2.length+j]=s1.data[j];str.length=s1.length+s2.length;printf("插入字符串成功长度为:%d\n",str.length); return str;}//删除字符串SqString DeleStr(SqString s,int i,int j){. int k;SqString str;str.length=0;if(i<=0||i>s.length||i+j>s.length+1){printf("字符串删除失败\n"); return str;}for(k=0;k<i-1;k++)str.data[k]=s.data[k];for(k=i+j-1;k<s.length;k++)str.data[k-j]=s.data[k];str.length=s.length-j;printf("删除子字符串成功剩余长度为:%d\n",str.length);return str;}//替换字符串void RepStr(SqString s,int i,int j,SqString t){int k;SqString str;str.length=0;. if(i<=0||i>s.length||i+j-1>s.length)printf("字符串替换失败了\n");for(k=0;k<i-1;k++)str.data[k]=s.data[k];for(k=0;k<t.length;k++)str.data[i+k-1]=t.data[k];for(k=i+j-1;k<s.length;k++)str.data[t.length+k-j]=s.data[k];str.length=s.length-j+t.length;printf("替换字符串成功新字符串长度为:%d\n",str.length);}//字符串的输出void DispStr(SqString s){int i;if(s.length>0){printf("下面输出这个字符串\n");for(i=0;i<s.length;i++)printf("%c",s.data[i]);printf("\n");}elseprintf("目前空字符串无法输出\n");}void main(){SqString s;char a[]={"wen xian liang"}; //字符串常量aStrAssign(s,a);DispStr(s);StrLength(s);SqString s1,s2,t; //s1是待复制的字符串变量printf("请输入一个字符串t:\n");scanf("%s",t.data);StrAssign(t,t.data);StrCopy(s1,t); //复制字符串StrLength(s1);DispStr(s1);printf("下面判断字符串s1和字符串s是否相等\n"); StrEqual(s,s1);printf("下面将字符串s1和字符串s合并一起\n"); SqString str;str=Concat(s,s1); //合并字符串DispStr(str);StrLength(str);SubStr(str,22,7); //求子字符串str=DeleStr(str,15,4); //删除字符串DispStr(str);StrLength(str);printf("请插入一个字符串s2\n");scanf("%s",s2.data);StrAssign(s2,s2.data);str=InserStr(str,15,s2); //插入字符串DispStr(str);StrLength(str);printf("顺序字符串的基本运算到此结束了\n"); }实验结果:实验四编程建立二叉树,对树进行插入删除及遍历的程序1.实验目的(1)进一步掌握指针变量的用途和程序设计方法。