数据结构实验报告册

合集下载

数据结构实验报告实验5

数据结构实验报告实验5

数据结构实验报告实验5一、实验目的本次实验的主要目的是深入理解和掌握常见的数据结构,如链表、栈、队列、树和图等,并通过实际编程实现,提高对数据结构的操作和应用能力。

同时,培养解决实际问题的思维和编程能力,提高代码的可读性、可维护性和效率。

二、实验环境本次实验使用的编程语言为C++,开发环境为Visual Studio 2019。

三、实验内容1、链表的基本操作创建链表插入节点删除节点遍历链表2、栈的实现与应用用数组实现栈用链表实现栈栈的应用:括号匹配3、队列的实现与应用用数组实现队列用链表实现队列队列的应用:排队模拟4、二叉树的遍历前序遍历中序遍历后序遍历5、图的表示与遍历邻接矩阵表示法邻接表表示法深度优先遍历广度优先遍历四、实验步骤1、链表的基本操作创建链表:首先定义一个链表节点结构体,包含数据域和指向下一个节点的指针域。

然后通过动态内存分配创建链表节点,并将节点逐个连接起来,形成链表。

插入节点:根据插入位置的不同,分为在表头插入、在表尾插入和在指定位置插入。

在指定位置插入时,需要先找到插入位置的前一个节点,然后进行节点的连接操作。

删除节点:同样需要根据删除位置的不同进行处理。

删除表头节点时,直接将头指针指向下一个节点;删除表尾节点时,找到倒数第二个节点,将其指针置为空;删除指定位置节点时,找到要删除节点的前一个节点,然后调整指针。

遍历链表:通过从链表头开始,依次访问每个节点,输出节点的数据。

2、栈的实现与应用用数组实现栈:定义一个固定大小的数组作为栈的存储空间,同时用一个变量记录栈顶位置。

入栈操作时,先判断栈是否已满,如果未满则将元素放入栈顶位置,并更新栈顶位置;出栈操作时,先判断栈是否为空,如果不空则取出栈顶元素,并更新栈顶位置。

用链表实现栈:与链表的操作类似,将新元素添加在链表头部作为栈顶。

括号匹配:输入一个包含括号的字符串,使用栈来判断括号是否匹配。

遇到左括号入栈,遇到右括号时与栈顶的左括号进行匹配,如果匹配成功则出栈,否则括号不匹配。

《数据结构》实验1实验报告

《数据结构》实验1实验报告

南京工程学院实验报告<班级>_<学号>_<实验X>.RAR文件形式交付指导老师。

一、实验目的1.熟悉上机环境,进一步掌握语言的结构特点。

2.掌握线性表的顺序存储结构的定义及实现。

3.掌握线性表的链式存储结构——单链表的定义及实现。

4.掌握线性表在顺序存储结构即顺序表中的各种基本操作。

5.掌握线性表在链式存储结构——单链表中的各种基本操作。

二、实验内容1.顺序线性表的建立、插入及删除。

2.链式线性表的建立、插入及删除。

三、实验步骤1.建立含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。

2.利用前面的实验先建立一个顺序表L={21,23,14,5,56,17,31},然后在第i个位置插入元素68。

3.建立一个带头结点的单链表,结点的值域为整型数据。

要求将用户输入的数据按尾插入法来建立相应单链表。

四、程序主要语句及作用程序1的主要代码(附简要注释)public struct sequenlist{public const int MAXSIZE=1024; /*最大值为1024*/public elemtype[] vec;public int len; /* 顺序表的长度 */public sequenlist( int n){vec=new elemtype[MAXSIZE ];len = n;}};class Program{static void Main(string[] args){sequenlist list1 = new sequenlist(5);for (int i = 0; i < 5; i++){list1.vec[i] = i;}for (int i = 0; i < 5; i++){Console.Write("{0}---", list1.vec[i]) ;}Console.WriteLine("\n");Console.WriteLine("表长:{0}\n",list1.len );Console.ReadKey();}}程序2的主要代码(附简要注释)public void insertlist(int i, int x){if (len >= MAXSIZE)throw new Exception("上溢"); /*长度大于最大值则抛出异常*/if (i < 1 || i > len + 1)throw new Exception("位置");/插入位置小于1或大于len+1则抛出插入位置错误的异常for (int j = len; j >= i; j--)vec[j] = vec[j - 1]; //注意第j个元素存在数组下标为j-1处vec[i - 1] = x;len++;}};class Program{static void Main(string[] args){sequenlist list2 = new sequenlist(7);list2.vec[0] = 21;list2.vec[1] = 23;list2.vec[2] = 14;list2.vec[3] = 5;list2.vec[4] = 56;list2.vec[5] = 17;list2.vec[6] = 31;Console.Write("请输入第i个位置插入元素:");int loc =Convert.ToInt32( Console.ReadLine());Console.Write("请输入第{0}个位置插入的元素:", loc);int ele = Convert.ToInt32(Console.ReadLine());Console.WriteLine("插入前的线性表:");for (int i = 0; i < list2.len ; i++){Console.Write("{0}---", list2.vec[i]);}Console.WriteLine("\n");list2.insertlist(loc, ele);Console.WriteLine("插入后的线性表:");for (int i = 0; i < list2.len ; i++){Console.Write("{0}---", list2.vec[i]);}Console.WriteLine("\n");Console.ReadKey();}}程序3的主要代码(附简要注释)class Node{private int num;public int Num{set { num = value; }/输入值get { return num; }/获得值}private Node next;public Node Next{set { next = value; }get { return next; }}}class Pp{static void Main(string[] args){Node head;Node tempNode, tempNode1;int i;head = new Node();Console.WriteLine("输入六项数据:\n");Console.Write("输入第1项数据:");head.Num = Convert.ToInt32(Console.ReadLine());head.Next = null;tempNode = head;for (i = 1; i < 6; i++){tempNode1 = new Node();Console.Write("输入第{0}项数据:",i+1);tempNode1.Num = Convert.ToInt32(Console.ReadLine());/插入项转换为整形数值 tempNode1.Next = null;tempNode.Next = tempNode1;tempNode = tempNode.Next;}Console.WriteLine("线性表:");tempNode = head;for (i = 0; i < 6; i++){Console.Write("{0}", tempNode.Num);if (i < 5){Console.Write("--");}tempNode = tempNode.Next;}Console.ReadKey();}}五、程序运行结果截图程序1程序2程序3六、收获,体会及问题(写得越详细、越个性化、越真实越好,否则我不知道你做这个实验的心路历程,也就无法充分地判断你是否是独立完成的这个实验、你是否在做这个实验时进行了认真仔细地思考、通过这个实验你是否在实践能力上得到了提高)这次试验刚开始做时完全不知道从哪下手,才刚上了几节课,对于线性表、链式表都不是理解的很透彻,不知道用哪个软件编写程序。

数据结构实验报告

数据结构实验报告
实验过程(实验中涉及的记录、数据、分析):
typedef OrderedLinkList polynomial;
// 用带表头结点的有序链表表示多项式
结点的数据元素类型定义为:
typedef struct polynomialnode { // 项的表示
float coef; // 系数
int expn; // 指数
while (pa&&pb) {a=pa->exn;b=pb->expn;
switch(*cmp(a,b)){ //a,b分别为pa,pb所指结点的指数
case -1:pc=pa;pa=pa->next; break; //a<b
case 0: {sum=pa->coef+pb->coef;
if (sum<>0){pa->coef=sum;pc=pa;}
else{pc->next=pa->next;free(pa);}
pa=pc->next;u=pb;pb=pb->next;free(u);
break;} //a=b
case 1: {u=pb->next;pb->next=pa;pc->next=pb;
pc=pb;pb=u; break;} //a>b
数据结构课程实验报告
学生姓名
某某
学 号
你的学号
班 级
计算机科学
指导老师
指导老师名字
实验名称
实验2 线性表
实验成绩
86
实验报告




实验目的:掌握线性表的基本操作如线性表的初始化、查找、插入、删除等,以及线性表的存概储结构的运用,并利用线性表实现一元多项式的相加。

数据结构实验报告

数据结构实验报告

实验报告题目数据结构实验学生姓名学号系部专业班级指导教师二〇一〇年十二月实验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程序的基本结构对线性表的一些基本操作和具体的函数定义。

数据结构 实验报告

数据结构 实验报告

数据结构实验报告一、实验目的数据结构是计算机科学中非常重要的一门课程,通过本次实验,旨在加深对常见数据结构(如链表、栈、队列、树、图等)的理解和应用,提高编程能力和解决实际问题的能力。

二、实验环境本次实验使用的编程语言为C++,开发工具为Visual Studio 2019。

操作系统为 Windows 10。

三、实验内容1、链表的实现与操作创建一个单向链表,并实现插入、删除和遍历节点的功能。

对链表进行排序,如冒泡排序或插入排序。

2、栈和队列的应用用栈实现表达式求值,能够处理加、减、乘、除和括号。

利用队列实现银行排队系统的模拟,包括顾客的到达、服务和离开。

3、二叉树的遍历与操作构建一棵二叉树,并实现前序、中序和后序遍历。

进行二叉树的插入、删除节点操作。

4、图的表示与遍历用邻接矩阵和邻接表两种方式表示图。

实现图的深度优先遍历和广度优先遍历。

四、实验步骤及结果1、链表的实现与操作首先,定义了链表节点的结构体:```cppstruct ListNode {int data;ListNode next;ListNode(int x) : data(x), next(NULL) {}};```插入节点的函数:```cppvoid insertNode(ListNode& head, int val) {ListNode newNode = new ListNode(val);head = newNode;} else {ListNode curr = head;while (curr>next!= NULL) {curr = curr>next;}curr>next = newNode;}}```删除节点的函数:```cppvoid deleteNode(ListNode& head, int val) {if (head == NULL) {return;}ListNode temp = head;head = head>next;delete temp;return;}ListNode curr = head;while (curr>next!= NULL && curr>next>data!= val) {curr = curr>next;}if (curr>next!= NULL) {ListNode temp = curr>next;curr>next = curr>next>next;delete temp;}}```遍历链表的函数:```cppvoid traverseList(ListNode head) {ListNode curr = head;while (curr!= NULL) {std::cout << curr>data <<"";curr = curr>next;}std::cout << std::endl;}```对链表进行冒泡排序的函数:```cppvoid bubbleSortList(ListNode& head) {if (head == NULL || head>next == NULL) {return;}bool swapped;ListNode ptr1;ListNode lptr = NULL;do {swapped = false;ptr1 = head;while (ptr1->next!= lptr) {if (ptr1->data > ptr1->next>data) {int temp = ptr1->data;ptr1->data = ptr1->next>data;ptr1->next>data = temp;swapped = true;}ptr1 = ptr1->next;}lptr = ptr1;} while (swapped);}```测试结果:创建了一个包含 5、3、8、1、4 的链表,经过排序后,输出为 1 3 4 5 8 。

数据结构的实验报告

数据结构的实验报告

一、实验目的本次实验旨在让学生掌握数据结构的基本概念、逻辑结构、存储结构以及各种基本操作,并通过实际编程操作,加深对数据结构理论知识的理解,提高编程能力和算法设计能力。

二、实验内容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的数据元素个数。

数据结构实验实训报告单

数据结构实验实训报告单

一、实验名称:数据结构实验实训二、实验时间:2023年10月25日三、实验地点:计算机实验室四、实验目的:1. 理解并掌握数据结构的基本概念和常用算法;2. 学会使用C++语言实现数据结构的操作;3. 提高编程能力和问题解决能力;4. 加深对数据结构在实际应用中的理解。

五、实验内容:1. 实验一:线性表(1)实验内容:实现线性表的基本操作,如插入、删除、查找、排序等。

(2)实验步骤:a. 定义线性表的数据结构;b. 实现线性表的插入、删除、查找、排序等操作;c. 编写测试程序,验证实验结果。

2. 实验二:栈与队列(1)实验内容:实现栈和队列的基本操作,并分析其时间复杂度和空间复杂度。

(2)实验步骤:a. 定义栈和队列的数据结构;b. 实现栈和队列的入栈、出栈、入队、出队等操作;c. 分析栈和队列的时间复杂度和空间复杂度;d. 编写测试程序,验证实验结果。

3. 实验三:链表(1)实验内容:实现链表的基本操作,如插入、删除、查找、排序等。

(2)实验步骤:a. 定义链表的数据结构;b. 实现链表的插入、删除、查找、排序等操作;c. 编写测试程序,验证实验结果。

4. 实验四:树与二叉树(1)实验内容:实现二叉树的基本操作,如插入、删除、查找、遍历等。

(2)实验步骤:a. 定义二叉树的数据结构;b. 实现二叉树的插入、删除、查找、遍历等操作;c. 编写测试程序,验证实验结果。

5. 实验五:图(1)实验内容:实现图的基本操作,如图的创建、添加边、查找路径等。

(2)实验步骤:a. 定义图的数据结构;b. 实现图的创建、添加边、查找路径等操作;c. 编写测试程序,验证实验结果。

六、实验心得:1. 通过本次实验,我对数据结构的基本概念和常用算法有了更深入的理解,为今后的学习和工作打下了坚实的基础。

2. 在实验过程中,我学会了使用C++语言实现数据结构的操作,提高了自己的编程能力。

3. 通过对数据结构在实际应用中的分析,我认识到数据结构在计算机科学中的重要地位,为今后的职业发展指明了方向。

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

实验一线性表的操作实验类型:验证性实验要求:必修实验学时: 2学时一、实验目的:参照给定的线性表顺序表类和链表类的程序样例,验证给出的线性表的常见算法。

二、实验要求:1、掌握线性表顺序表类和链表类的特点。

掌握线性表的常见算法。

2、提交实验报告,报告内容包括:目的、要求、算法描述、程序结构、主要变量说明、程序清单、调试情况、设计技巧、心得体会。

三、实验内容:1.设计一个静态数组存储结构的顺序表类,要求编程实现如下任务:建立一个线性表,首先依次输人数据元素1,2,3,…,10,然后删除数据元素6,最后依次显示当前线性表中的数据元素。

要求采用顺序表实现,假设该顺序表的数据元素个数在最坏情况下不会超过10个。

第一题源代码:#include<iostream>using namespace std;template <class T> //定义模板类SeqListclass SeqList{private:int length,x,j,data[10];public:public:SeqList( ) //无参构造函数{length=0;}SeqList(T a[ ], int n) //有参构造函数{for(int i=0;i<n;i++)data[i]=a[i];length=n;}~SeqList( ) //析构函数为空{}int Length( ) //求线性表的长度{return length;}T Get(int i) //按位查找,取线性表的第i个元素{}int Locate(T x ) //按值查找,求线性表中值为x的元素序号{}void Insert(int i, T x) //在线性表中第i个位置插入值为x的元素{}T Delete(int i) //删除线性表的第i个元素{if(length==0)throw"下溢";if(i<1||i>length)throw"位置异常";x=data[i-1];for(j=i;j<length;j++)data[j-1]=data[j]; //注意此处j已经是元素所在的数组下标length--;return x;}void PrintList( ) //遍历线性表,按序号依次输出各元素{for(int i=0;i<length;i++)cout<<data[i]<<" ";cout<<endl;}};void main(){int n=10,a[10]={1,2,3,4,5,6,7,8,9,10};SeqList<int> theseqlist(a,n);cout<<"删除前元素:";for(int i=0;i<n;i++)cout<<a[i]<<" ";cout<<endl;theseqlist.Delete(6);theseqlist.PrintList();}运行结果:---------------------------------------------------------------------------------------------------------------------- 2.设计一个带头结点的单链表类,要求:(1)带头结点单链表类的成员函数包括取数据元素个数、插入元素、删除所有值为k的元素、取数据元素。

(2)设计一个测试主函数,实际运行验证所设计循环单链表类的正确性。

第二题源代码:#include<iostream>using namespace std;template<class T>struct Node{T data;Node<T> *next;};/*****************************/template <class T>class LinkList{private:Node<T> *first; //单链表头指针int length;public:LinkList(){first=new Node<T>;first->next=NULL;}LinkList(T a[],int n) //建立n个节点的指针{Node<T> *s;first=new Node<T>;first->next=NULL; //初始化一个空链表for(int i=0;i<n;i++){s=new Node<T>;s->data=a[i];s->next=first->next;first->next=s;}length=n;}~LinkList(){Node<T> *p=first;while(p){Node<T> *q;q=p;p=p->next;delete q;}}int Length(); //求单链表长度T Get(int i); //取单链表第i个节点元素值int Locate(T x); //求单链表值为x的元素序号void Insert(int i,T x); //在单链表中第i个位置插入元素值x的节点T Delete(int i); //在单链表中删除第i个节点void PrintList(); // 遍历单链表,按序号依次输出个元素};/********************************/template<class T>int LinkList<T>::Length(){return length;}/******************************/template <class T>T LinkList<T>::Get(int i){int j;Node<T> *p;p=first->next;j=1;while(p&& j<i){p=p->next;j++;}if(!p)throw "位置";elsereturn p->data;}/***********************************/ template<class T>int LinkList<T>::Locate(T x){Node<T> *p;p=first;for(int i=0;i<length;i++){p=p->next;if(p->data==x)return i+1;}}/***********************************/ template<class T>void LinkList<T>::Insert(int i,T x){Node<T> *p;int j;p=first;j=0;while(p&&j<i-1){p=p->next;j++;}if(!p)throw"位置";else{Node<T> *s;s=new Node<T>;s->data=x;s->next=p->next;p->next=s;}length++;}/**************************************/template<class T>T LinkList<T>::Delete(int i){Node<T> *p;int j;p=first;j=0;while(p&&j<i-1){p=p->next;j++;}if(!p||!p->next)throw"位置";else{Node<T> *q;q=new Node<T>;int x;q=p->next;x=q->data;p->next=q->next;delete q;length--;return x;}}/*******************************************/template<class T>void LinkList<T>::PrintList() // 遍历单链表,按序号依次输出个元素{Node<T> *p;p=first;for(int i=0;i<length;i++){p=p->next;cout<<"第"<<(i+1)<<"个元素为:"<<(p->data)<<endl;}}/*******************************************/{int r[ ]={10,9,8,7,6,5,4,3,2,1};LinkList <int> a( r , 10 );cout<<"原表为:"<<endl;a.PrintList();cout<<endl;a.Insert(1,-2); //执行插入操作;a.Insert(2,-1);a.Insert(3,0 );cout<<"执行插入后输出为:"<<endl;a.PrintList();cout<<endl;a.Delete(1);a.Delete(1);a.Delete(1);cout<<"执行删除后输出为:"<<endl;a.PrintList();cout<<endl;cout<<"按位查找元素:"<<endl;cout<<"第5 个元素为: ";cout<<a.Get(5)<<endl; //查找链表中第5 个元素cout<<endl;}运行结果:实验二栈、队列、串的操作实验类型:验证性实验要求:必修实验学时: 2学时一、实验目的:参照给定的栈类和队列类的程序样例,验证给出的栈和队列的常见算法,并结合线性表类实现有关串的操作。

相关文档
最新文档