数据结构实验报告二

合集下载

数据结构实验报告(C语言)(强力推荐)

数据结构实验报告(C语言)(强力推荐)

数据结构实验实验内容和目的:掌握几种基本的数据结构:集合、线性结构、树形结构等在求解实际问题中的应用,以及培养书写规范文档的技巧。

学习基本的查找和排序技术。

让我们在实际上机中具有编制相当规模的程序的能力。

养成一种良好的程序设计风格。

实验教材:数据结构题集(C语言版)清华大学出版社2007年实验项目:实验一、栈和循环队列㈠、实验内容:①栈掌握栈的特点(先进后出FILO)及基本操作,如入栈、出栈等,栈的顺序存储结构和链式存储结构,以便在实际问题背景下灵活应用。

本程序采用的是链栈结构,具有初始化一个栈、PUSH、POP、显示所有栈里的元素四个功能。

②循环队列掌握队列的特点(先进先出FIFO)及基本操作,如入队、出队等,学会循环队列的实现,以便在实际问题背景下灵活运用。

本程序具有初始化一个队列、入队、出队、显示队列的所有元素、队列长度五个功能。

㈡、实验代码①栈程序代码:#include <stdio.h>#include <malloc.h>#define Stack_Size 6#define ERROR 0#define OK 1typedef int SElemType;typedef struct SNode{SElemType data;struct SNode *next;}SNode,*LinkStack;int CreatTwo(LinkStack &head,int n){int i;SNode *p;head=(LinkStack)malloc(sizeof(SNode));head->next=NULL;printf("请输入数据(数字):\n");for(i=n;i>0;--i){p=(SNode *)malloc(sizeof(SNode));scanf("%d",&p->data);p->next=head->next;head->next=p;}return 1;}int menu_select(){int sn;for(;;){scanf("%d",&sn);if(sn<1||sn>6)printf("\n\t输入错误,请重新输入\n");elsebreak;}return sn;}int Push(LinkStack &top,SElemType e){SNode *q;q=(LinkStack)malloc(sizeof(SNode));if(!q){printf("溢出!\n");return(ERROR);}q->data=e;q->next=top->next;top->next=q;return(OK);}int Pop(LinkStack &top,SElemType &e){SNode *q;if(!top->next){printf("error!\n");return(ERROR);}e=top->next->data;q=top->next;top->next=q->next;free(q);return(OK);}void main(){ int e;LinkStack top;printf("1.初始化一个栈;\n2.PUSH;\n3.POP;\n4.显示所有栈里的元素;\n5.结束;\n");while(1){switch(menu_select()){case 1:if(CreatTwo(top,Stack_Size))printf("Success!\n");break; case 2:printf("Push:\n");scanf("%d",&e);if(Push(top,e))printf("Success!\n");break;case 3:if(Pop(top,e))printf("Success!\n");printf("%d\n",e);break;case 4:LinkStack p;printf("所有栈里的元素:\n");p=top;while(p->next){p=p->next;printf("%7d",p->data);}printf("\n");break;case 5:return;}}}运行结果:②循环队列程序代码:#include<stdlib.h>#include<stdio.h>#define OVERFLOW -1#define OK 1#define ERROR 0#define MAXSIZE 100typedef struct{int *elem;//队列存储空间int front;int rear;}SqQueue;//判断选择是否正确int menu_select(){int sn;for(;;){scanf("%d",&sn);if(sn<1||sn>6)printf("\n\t输入错误,请重新输入\n");elsebreak;}return sn;}//参数(传出)SqQueue &Q,循环队列(空)int InitQueue(SqQueue &Q){Q.elem=(int *)malloc(MAXSIZE*sizeof(int));if(!Q.elem)exit(OVERFLOW);Q.front=Q.rear=-1;for(int i=0;i<MAXSIZE;i++)Q.elem[i]=-1;return OK;}//返回Q的元素个数int QueueLength(SqQueue Q){return (Q.rear-Q.front+MAXSIZE)%MAXSIZE;}//显示队列的元素void Display(SqQueue Q){for(int i=0;i<=QueueLength(Q);i++)if(Q.elem[i]!=-1)printf("%d ",Q.elem[i]);printf("\n");}//入队int EnQueue(SqQueue &Q,int e){Q.rear=(Q.rear+1)%MAXSIZE;if(Q.rear==Q.front)return ERROR;Q.elem[Q.rear]=e;return OK;}//出队int DeQueue(SqQueue &Q,int &e){if(Q.front==Q.rear)return ERROR;e=Q.elem[Q.front+1];Q.elem[Q.front+1]=-1;Q.front=(Q.front+1)%MAXSIZE;return OK;}void main(){SqQueue Q;InitQueue(Q);int elem,e;printf("请输入队列元素(以0结束):\n");scanf("%d",&elem);while(elem!=0){EnQueue(Q,elem);scanf("%d",&elem);}printf("队列为:\n");Display(Q);printf("1.初始化一个队列;\n2.入队;\n3.出队;\n4.显示队列的所有元素;\n5.队列长度:\n6.结束;\n");while(1){switch(menu_select()){case 1:printf("请输入队列元素(以0结束):\n");scanf("%d",&elem);while(elem!=0){EnQueue(Q,elem);scanf("%d",&elem);}printf("队列为:\n");Display(Q);fflush(stdin);break;case 2:scanf("%d",&elem);EnQueue(Q,elem);printf("队列为:\n");Display(Q);fflush(stdin);break;case 3:DeQueue(Q,elem);printf("队列为:\n");Display(Q);break;case 4:printf("\n队列的所有元素:\n");Display(Q);break;case 5:printf("%d\n",QueueLength(Q));break;case 6:return;}}}运行结果:实验二、数组㈠、实验内容:数组一般不做插入或删除操作,也就是说,一旦建立了数组,则结构中的数据元素个数和元素之间的关系就不再发生变动。

数据结构实验报告实验总结

数据结构实验报告实验总结

数据结构实验报告实验总结本次数据结构实验主要涉及线性表、栈和队列的基本操作以及链表的应用。

通过实验,我对这些数据结构的特点、操作和应用有了更深入的了解。

下面对每一部分实验进行总结。

实验一:线性表的基本操作线性表是一种常见的数据结构,本实验要求实现线性表的基本操作,包括插入、删除、查找、遍历等。

在实验过程中,我对线性表的结构和实现方式有了更清晰的认识,掌握了用数组和链表两种方式实现线性表的方法。

实验二:栈的应用栈是一种后进先出(LIFO)的数据结构,本实验要求利用栈实现简单的括号匹配和后缀表达式计算。

通过实验,我了解到栈可以方便地实现对于括号的匹配和后缀表达式的计算,有效地解决了对应的问题。

实验三:队列的应用队列是一种先进先出(FIFO)的数据结构,本实验要求利用队列实现银行排队和迷宫求解。

通过实验,我对队列的应用有了更加深入的了解,了解到队列可以解决需要按顺序处理的问题,如排队和迷宫求解等。

实验四:链表的应用链表是一种常用的数据结构,本实验要求利用链表实现学生信息管理系统。

通过实验,我对链表的应用有了更深入的了解,了解到链表可以方便地实现对于数据的插入、删除和修改等操作,并且可以动态地调整链表的长度,适应不同的需求。

通过本次实验,我掌握了线性表、栈、队列和链表的基本操作,并了解了它们的特点和应用方式。

同时,通过实际编程的过程,我对于数据结构的实现方式和效果有了更直观的认识,也锻炼了自己的编程能力和解决问题的能力。

在实验过程中,我遇到了一些问题,如程序逻辑错误和内存泄漏等,但通过调试和修改,最终成功解决了这些问题,对自己的能力也有了更多的信心。

通过本次实验,我深刻体会到了理论与实践的结合的重要性,也对于数据结构这门课程有了更加深入的理解。

总之,本次数据结构实验给予了我很多有益的启发和收获,对于数据结构的概念、特点和应用有了更深入的理解。

在以后的学习中,我会继续加强对数据结构的学习和研究,不断提高自己的编程能力和解决问题的能力。

数据结构迷宫问题实验报告

数据结构迷宫问题实验报告

《数据结构与算法设计》迷宫问题实验报告——实验二专业:物联网工程班级:物联网1班学号:********姓名:***一、实验目的本程序是利用非递归的方法求出一条走出迷宫的路径,并将路径输出。

首先由用户输入一组二维数组来组成迷宫,确认后程序自动运行,当迷宫有完整路径可以通过时,以0和1所组成的迷宫形式输出,标记所走过的路径结束程序;当迷宫无路径时,提示输入错误结束程序。

二、实验内容用一个m*m长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。

设计一个程序对于任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。

三、程序设计1、概要设计(1)设定栈的抽象数据类型定义ADT Stack{数据对象:D={ai|ai属于CharSet,i=1、2…n,n>=0}数据关系:R={<ai-1,ai>|ai-1,ai属于D,i=2,3,…n}基本操作:InitStack(&S)操作结果:构造一个空栈Push(&S,e)初始条件:栈已经存在操作结果:将e所指向的数据加入到栈s中Pop(&S,&e)初始条件:栈已经存在操作结果:若栈不为空,用e返回栈顶元素,并删除栈顶元素Getpop(&S,&e)初始条件:栈已经存在操作结果:若栈不为空,用e返回栈顶元StackEmpty(&S)初始条件:栈已经存在操作结果:判断栈是否为空。

若栈为空,返回1,否则返回0Destroy(&S)初始条件:栈已经存在操作结果:销毁栈s}ADT Stack(2)设定迷宫的抽象数据类型定义ADT yanshu{数据对象:D={ai,j|ai,j属于{‘’、‘*’、‘@’、‘#’},0<=i<=M,0<=j<=N}数据关系:R={ROW,COL}ROW={<ai-1,j,ai,j>|ai-1,j,ai,j属于D,i=1,2,…M,j=0,1,…N}COL={<ai,j-1,ai,j>|ai,j-1,ai,j属于D,i=0,1,…M,j=1,2,…N}基本操作:InitMaze(MazeType &maze, int a[][COL], int row, int col){初始条件:二维数组int a[][COL],已经存在,其中第1至第m-1行,每行自第1到第n-1列的元素已经值,并以值0表示障碍,值1表示通路。

数据结构实验报告

数据结构实验报告

数据结构实验报告一、实验目的数据结构是计算机科学中重要的基础课程,通过本次实验,旨在深入理解和掌握常见数据结构的基本概念、操作方法以及在实际问题中的应用。

具体目的包括:1、熟练掌握线性表(如顺序表、链表)的基本操作,如插入、删除、查找等。

2、理解栈和队列的特性,并能够实现其基本操作。

3、掌握树(二叉树、二叉搜索树)的遍历算法和基本操作。

4、学会使用图的数据结构,并实现图的遍历和相关算法。

二、实验环境本次实验使用的编程环境为具体编程环境名称,编程语言为具体编程语言名称。

三、实验内容及步骤(一)线性表的实现与操作1、顺序表的实现定义顺序表的数据结构,包括数组和表的长度等。

实现顺序表的初始化、插入、删除和查找操作。

2、链表的实现定义链表的节点结构,包含数据域和指针域。

实现链表的创建、插入、删除和查找操作。

(二)栈和队列的实现1、栈的实现使用数组或链表实现栈的数据结构。

实现栈的入栈、出栈和栈顶元素获取操作。

2、队列的实现采用循环队列的方式实现队列的数据结构。

完成队列的入队、出队和队头队尾元素获取操作。

(三)树的实现与遍历1、二叉树的创建以递归或迭代的方式创建二叉树。

2、二叉树的遍历实现前序遍历、中序遍历和后序遍历算法。

3、二叉搜索树的操作实现二叉搜索树的插入、删除和查找操作。

(四)图的实现与遍历1、图的表示使用邻接矩阵或邻接表来表示图的数据结构。

2、图的遍历实现深度优先遍历和广度优先遍历算法。

四、实验结果与分析(一)线性表1、顺序表插入操作在表尾进行时效率较高,在表头或中间位置插入时需要移动大量元素,时间复杂度较高。

删除操作同理,在表尾删除效率高,在表头或中间删除需要移动元素。

2、链表插入和删除操作只需修改指针,时间复杂度较低,但查找操作需要遍历链表,效率相对较低。

(二)栈和队列1、栈栈的特点是先进后出,适用于函数调用、表达式求值等场景。

入栈和出栈操作的时间复杂度均为 O(1)。

2、队列队列的特点是先进先出,常用于排队、任务调度等场景。

数据结构实验二_栈的基本操作

数据结构实验二_栈的基本操作

青岛理工大学课程实验报告及实验步骤只要X不为0重复做下列动作将X%R入栈X=X/R只要栈不为空重复做下列动作栈顶出栈输出栈顶元素调试过程及实验结果根据输入的十进制数通过桟的基本操作可以转换成二进制、八进制、十六进制的数。

在上机过程中程序的调用没有太大的问题,按照课本的基本算法就可以将程序正确的运行。

总结程序可以完成基本的功能,可以将十进制数转换为其他进制的数,基本掌握了桟的几种常用的操作;但程序存在缺陷,就是不能持续进行操作,输入了一个十进制数只能进行一次数制转换,程序就会退出,有待改进。

附录#include <stdio.h>#include <stdlib.h>#include <malloc.h>#define stack_init_size 100#define stackincrement 10typedef struct sqstack{int *base;int *top;int stacksize;} sqstack;int StackInit(sqstack *s){s->base=(int *)malloc(stack_init_size *sizeof(int));if(!s->base)return 0;{return 0;}}int conversion(sqstack *s){int n,e=0,flag=0;printf("输入要转化的十进制数:\n");scanf("%d",&n);printf("要转化为多少进制:2进制、8进制、16进制填数字!\n");scanf("%d",&flag);printf("将十进制数%d转化为%d进制是:\n",n,flag);while(n){s->top=s->base;s->stacksize=stack_init_size;return 1;}int Push(sqstack *s,int e){if(s->top-s->base>=s->stacksize){s->base=(int*)realloc(s->base,(s->stacksize+stackincrement)*sizeof(int)); if(!s->base)return 0;s->top=s->base+s->stacksize;s->stacksize+=stackincrement;}*(s->top++)=e;return e;}int Pop(sqstack *s,int e){if(s->top==s->base)return 0;e=*--s->top;return e;}int stackempty(sqstack *s){if(s->top==s->base){return 1;}elsePush(s,n%flag);n=n/flag;}while(!stackempty(s)) {e=Pop(s,e);switch(e){case 10: printf("A");break;case 11: printf("B");break;case 12: printf("C");break;case 13: printf("D");break;case 14: printf("E");break;case 15: printf("F");break;default: printf("%d",e); }}printf("\n");return 0;}int main(){sqstack s;StackInit(&s); conversion(&s);return 0;}。

数据结构 实验报告

数据结构 实验报告

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

二、实验环境本次实验使用的编程语言为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.使用C/C++语言实现队列的基本操作:初始化队列、入队、出队、判空、判满等。

2.使用C/C++语言实现栈的基本操作:初始化栈、入栈、出栈、判空、判满等。

3.验证队列和栈的实现是否正确。

4.分析队列和栈的时间复杂度,并给出实验结果。

5.撰写实验报告,包括实验目的、实验原理、实验步骤、程序源代码、实验结果和分析、实验总结等内容。

三、实验原理1.队列:队列是一种先进先出(FIF0)的数据结构。

在队列中,数据元素按照进入队列的顺序排列,首元素是最先进入的元素,尾元素是最后进入的元素。

队列的基本操作有:初始化队列、入队、出队、判空、判满等。

2.栈:栈是一种后进先出(LIFO)的数据结构。

在栈中,数据元素按照进入栈的顺序排列,但是只能从栈顶进出,即最后进入的元素最先出栈。

栈的基本操作有:初始化栈、入栈、出栈、判空、判满等。

四、实验步骤1.实现队列的基本操作:1.初始化队列:创建一个空队列,并设置相关指针。

2.入队:将新元素插入到队尾。

3.出队:将队头元素删除,并返回其值。

4.判空:判断队列是否为空。

5.判满:判断队列是否已满。

2.实现栈的基本操作:1.初始化栈:创建一个空栈,并设置相关指针。

2.入栈:将新元素压入栈顶。

3.出栈:将栈顶元素弹出,并返回其值。

4.判空:判断栈是否为空。

5.判满:判断栈是否已满。

3.编写测试代码,验证队列和栈的基本操作是否正确。

4.进行性能测试,分析队列和栈的时间复杂度。

五、实验结果与分析1.队列的时间复杂度:●初始化队列:O(1)●入队:O(1)●出队:O(1)●判空:O(1)●判满:O(1)2.栈的时间复杂度:●初始化栈:O(1)●入栈:O(1)●出栈:O(1)●判空:O(1)●判满:O(1)3.根据实验结果可以看出,队列和栈的基本操作的时间复杂度都是O(1),即常数时间复杂度,具有高效性。

数据结构_迷宫求解_实验报告 北邮

数据结构_迷宫求解_实验报告 北邮

数据结构实验报告实验名称:实验二——利用栈结构实现迷宫求解问题学生姓名:班级:班内序号:学号:日期:2012年11月19日一、实验目的1、进一步掌握指针、模板类、异常处理的使用2、掌握栈的操作的实现方法3、掌握队列的操作的实现方法4、学习使用栈解决实际问题的能力5、学习使用队列解决实际问题的能力二、实验要求:利用栈结构实现迷宫求解问题。

迷宫求解问题如下:心理学家把一只老鼠从一个无顶盖的大盒子的入口赶进迷宫,迷宫中设置很多隔壁,对前进方向形成了多处障碍,心理学家在迷宫的唯一出口放置了一块奶酪,吸引老鼠在迷宫中寻找通路以到达出口,测试算法的迷宫如下图所示。

提示:1、可以使用递归或非递归两种方法实现2、老鼠能够记住已经走过的路,不会反复走重复的路径3、可以自己任意设置迷宫的大小和障碍4、使用“穷举求解”的方法三、程序分析1、存储结构栈存储结构;示意图;2、关键算法分析A、绘制迷宫;伪代码:1、输出迷宫的大小及全部设置为障碍;2、根据键盘的输入绘制迷宫的路线,起始点和终点;void draw()//绘制迷宫障碍{k=getch();switch(int(k)){case 105://上if(by>5){by--;j--;}break;case 107://下if(by<M+4){by++;j++;}break;case 106://左if(bx>2){bx=bx-2;i--;}break;case 108://右if(bx<2*N){bx=bx+2;i++;}break;case 114://'R'路map[i][j]=0;cout<<".";break;case 119://'W'墙map[i][j]=-3;cout<<"■";break;case 115://'S'起点s[0].x=i;//起点入栈s[0].y=j;top=1;map[i][j]=-1;cout<<k;break;case 101://'E'终点map[i][j]=-2;cout<<k;break;}gotoxy(bx,by);}B、路径寻找伪代码;1、向某一方向查找是否有路;2、如有遍历一下栈,看是否已经进栈,一进栈就舍弃,寻求下一个;无就让其进栈。

数据结构实验2——栈和队列实验报告

数据结构实验2——栈和队列实验报告

数据结构实验报告实验名称:实验2——栈和队列1 实验目的通过选择下面五个题目之一进行实现,掌握如下内容:进一步掌握指针、模板类、异常处理的使用掌握栈的操作的实现方法掌握队列的操作的实现方法学习使用栈解决实际问题的能力学习使用队列解决实际问题的能力2 实验内容利用栈结构实现八皇后问题。

八皇后问题19世纪著名的数学家高斯于1850年提出的。

他的问题是:在8*8的棋盘上放置8个皇后,使其不能互相攻击,即任意两个皇后都不能处于同一行、同一列、同一斜线上。

请设计算法打印所有可能的摆放方法。

提示:1、可以使用递归或非递归两种方法实现2、实现一个关键算法:判断任意两个皇后是否在同一行、同一列和同一斜线上2. 程序分析主程序:#include<iostream>using namespace std;const int StackSize=8; //皇后的个数int num=0;template <class T>class SeqStack //定义顺序栈模板类{public:SeqStack(){top=-1;} //构造函数,初始化空栈void Push(T x); //入栈操作void Pop();//出栈操作void PlaceQueen(int row); //放置皇后bool Judgement();//判断是否符合条件void Print();//输出符合条件的皇后排列bool Empty(){if(top==-1) return true;else return false;}; //判断栈是否为空private:T data[StackSize]; //定义数组int top; //栈顶指针};template <class T>void SeqStack<T>::Push(T x) //入栈操作{if(top>=StackSize-1) throw"上溢";top++;//栈顶指针上移data[top]=x;}template <class T>void SeqStack<T>::Pop()//出栈操作{if(Empty()) throw"下溢";top--;//栈顶指针下移}template <class T>bool SeqStack<T>::Judgement()//判断该位置是否合适{for(int i=0;i<top;i++)if(data[top]==data[i]||(abs(data[top]-data[i]))==(top-i))//判断是否满足任意两个皇后不在同列同一斜线return false;return true;}template <class T>void SeqStack<T>::PlaceQueen(int row) //放置皇后{for (int i=0;i<StackSize;i++){Push(i); //入栈if (Judgement())//判断位置是否合适{if (row<StackSize-1)PlaceQueen(row+1); //如果合适满足条件则放置一个皇后,递归调用else{num++;//不满足条件则到下一行Print();//输出符合条件的皇后}}Pop();//出栈}}template <class T>void SeqStack<T>::Print()//输出皇后函数{cout<<"NO."<<num<<":"<<endl; for(int i=0;i<StackSize;i++){for(int j=0;j<data[i];j++){cout<<"□";}cout<<"■";for(int j=StackSize-1;j>data[i];j--){cout<<"□";}cout<<endl;}cout<<endl;}void main(){SeqStack<int> Queen;Queen.PlaceQueen(0);cout<<"总共有"<<num<<"种摆放方法。

数据结构上机实验报告

数据结构上机实验报告

数据结构实验报告课程数据结构 _ 院系专业班级实验地点姓名学号实验时间指导老师数据结构上机实验报告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的数据元素个数。

厦门理工学院数据结构实验2

厦门理工学院数据结构实验2

《数据结构》实验报告实验序号:2 实验项目名称:顺序表的实现四、实验结果与数据处理1.设A、B均为用数组实现的List类型的有序顺序表,试设计一个函数Alternate,从A、B读取值,构件数组C,使得C的值也有序。

要求:用不同的方式实现(至少两种),并比较算法的效率。

(1)运行结果:图1:先合并之后再排序图2:合并时排序(2)问题分析:在这一问题中,A顺序表和B顺序表的合并方法可以分为先将这两个顺序表合并后排序或者在输入时就对其进行比较元素大小排序。

这里第一种方法,因为上一次实验学习过了快速排序,所以这一次我采用了另一种方法——希尔排序,希尔排序法是对直接插入排序法的优化,通过设置一个增量,对原始序列进行分组,对每组用直接插入排序法排序再整合,再缩小增量,周而复始直至增量为1,完成排序,因此又叫“缩小增量排序法”。

希尔排序的算法性能在面对大量数据时会高于快速排序,它的平均时间复杂度为n*log2n,整体范围为n^(1.3—2)之间。

第二种方法是我们在输入时就对新顺序表进行排序,在输入A顺序表的时候我们正常接收数据,而在输入B顺序表时,我们通过遍历一次当前顺序表同时结合插入数据函数来将B顺序表输入的数据放到正确的位置上,来使整个顺序表能够有序,整体时间复杂度为n^2左右,可见第一种方法的算法效率会更高一些。

2.顺序表表示和实现线性表的如下:【要求】(1)实现顺序表的插入、删除、按值查找等基本操作;(2)假设构建的是非递增有序顺序表,设计算法实现从该有序顺序表中删除所有其值重复的元素,使得表中所有元素的值均不同。

(3)设有一元素为整数的线性表L=(a1,a2,a3,…,an),存放在一维数组A[N]中,设计一个算法,以表中an作为参考元素,将该表分为左、右两部分,其中左半部分每个元素小于等于an,右半部分每个元素都大于an, an位于分界位置上(要求结果仍存放在A[N]中)。

(4)分析以上算法的时间复杂性。

数据结构课程实验报告

数据结构课程实验报告

数据结构课程实验报告一、实验目的本次数据结构课程实验的主要目的是通过实践掌握常见数据结构的基本操作,包括线性结构、树形结构和图形结构。

同时,也要求学生能够熟练运用C++语言编写程序,并且能够正确地使用各种算法和数据结构解决具体问题。

二、实验内容本次实验涉及到以下几个方面:1. 线性表:设计一个线性表类,并且实现线性表中元素的插入、删除、查找等基本操作。

2. 栈和队列:设计一个栈类和队列类,并且分别利用这两种数据结构解决具体问题。

3. 二叉树:设计一个二叉树类,并且实现二叉树的遍历(前序遍历、中序遍历和后序遍历)。

4. 图论:设计一个图类,并且利用图论算法解决具体问题(如最短路径问题)。

三、实验过程1. 线性表首先,我们需要设计一个线性表类。

在这个类中,我们需要定义一些成员变量(如线性表大小、元素类型等),并且定义一些成员函数(如插入元素函数、删除元素函数等)。

在编写代码时,我们需要注意一些细节问题,如边界条件、异常处理等。

2. 栈和队列接下来,我们需要设计一个栈类和队列类。

在这两个类中,我们需要定义一些成员变量(如栈顶指针、队头指针等),并且定义一些成员函数(如入栈函数、出栈函数、入队函数、出队函数等)。

在编写代码时,我们需要注意一些细节问题,如空间不足的情况、空栈或空队列的情况等。

3. 二叉树然后,我们需要设计一个二叉树类,并且实现二叉树的遍历。

在这个类中,我们需要定义一个节点结构体,并且定义一些成员变量(如根节点指针、节点数量等),并且定义一些成员函数(如插入节点函数、删除节点函数、遍历函数等)。

在编写代码时,我们需要注意一些细节问题,如递归调用的情况、空节点的情况等。

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. 实验总结通过本次实验,学生将对数据结构与算法设计有更深入的了解,并能将所学知识应用到实际问题中,提高自己的实践能力和解决问题的能力。

国家开放大学《数据结构》课程实验报告(实验2——线性表)参考答案

国家开放大学《数据结构》课程实验报告(实验2——线性表)参考答案
printf("\n");
//在链表中删除最高分和最低分结点
for(q=head,p=head->next;p!=NULL;q=p,p=p->next)
{
if(p==pmin) { q->next=p->next; p=q; } //删除最低分结点
};
typedef struct pw PW;
//定义链表结点
struct node
{
PW data;
struct node * next;
};
typedef struct node NODE;
NODE *create(int n); //建立单链表
void input(NODE *s,int i); //输入第i个评委信息
(5)遍历链表,累加求和,计算总分及平均分,并输出相关信息。
完整程序
//实验1.1线性表的链接存储结构
#include
#include
#include
#define PWRS 5 //定义评委人数
//定义评委信息
struct pw
{
char name[8]; //姓名
short age; //年龄
float score; //评分
NODE *create(int n)
{
NODE *head,*p,*q;
inti;
p=(NODE*)malloc(sizeof(NODE));
head=p; q=p; p->next=NULL;
for(i=1; i<=n; i++)
{
p=(NODE*)malloc(sizeof(NODE));

数据结构实验报告

数据结构实验报告

数据结构实验报告一、实验目的数据结构是计算机科学中的重要基础课程,通过实验可以更深入地理解和掌握数据结构的概念、原理和应用。

本次实验的主要目的包括:1、熟悉常见的数据结构,如链表、栈、队列、树和图等。

2、掌握数据结构的基本操作,如创建、插入、删除、遍历等。

3、提高编程能力和解决实际问题的能力,能够运用合适的数据结构解决具体的问题。

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

三、实验内容1、链表的实现与操作单向链表的创建、插入和删除节点。

双向链表的实现和基本操作。

循环链表的特点和应用。

2、栈和队列的实现栈的后进先出特性,实现入栈和出栈操作。

队列的先进先出原则,完成入队和出队功能。

3、树的操作二叉树的创建、遍历(前序、中序、后序)。

二叉搜索树的插入、查找和删除操作。

4、图的表示与遍历邻接矩阵和邻接表表示图。

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

四、实验步骤及结果1、链表的实现与操作单向链表:首先,定义了链表节点的结构体,包含数据域和指向下一个节点的指针域。

通过创建链表头节点,并使用循环依次插入新节点,实现了链表的创建。

插入节点时,根据指定位置找到插入点的前一个节点,然后修改指针完成插入操作。

删除节点时,同样找到要删除节点的前一个节点,修改指针完成删除。

实验结果:成功创建、插入和删除了单向链表的节点,并正确输出了链表的内容。

双向链表:双向链表节点结构体增加了指向前一个节点的指针。

创建、插入和删除操作需要同时维护前后两个方向的指针。

实验结果:双向链表的各项操作均正常,能够双向遍历链表。

循环链表:使链表的尾节点指向头节点,形成循环。

在操作时需要特别注意循环的边界条件。

实验结果:成功实现了循环链表的创建和遍历。

2、栈和队列的实现栈:使用数组或链表来实现栈。

入栈操作将元素添加到栈顶,出栈操作取出栈顶元素。

实验结果:能够正确进行入栈和出栈操作,验证了栈的后进先出特性。

数据结构实验报告

数据结构实验报告

数据结构实验报告一、实验目的数据结构是计算机科学中的重要基础课程,通过本次实验,旨在加深对常见数据结构(如数组、链表、栈、队列、树、图等)的理解和运用,提高编程能力和问题解决能力,培养算法设计和分析的思维。

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

三、实验内容1、数组与链表的实现与操作分别实现整数数组和整数链表的数据结构。

实现数组和链表的插入、删除、查找操作,并比较它们在不同操作下的时间复杂度。

2、栈与队列的应用用数组实现栈结构,用链表实现队列结构。

模拟栈的入栈、出栈操作和队列的入队、出队操作,解决实际问题,如表达式求值、任务调度等。

3、二叉树的遍历构建二叉树的数据结构。

实现先序遍历、中序遍历和后序遍历三种遍历算法,并输出遍历结果。

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

实现图的深度优先搜索(DFS)和广度优先搜索(BFS)算法,并分析它们的时间复杂度。

四、实验步骤1、数组与链表数组的实现:定义一个固定大小的整数数组,通过索引访问和操作数组元素。

链表的实现:定义链表节点结构体,包含数据和指向下一个节点的指针。

插入操作:对于数组,若插入位置在末尾,直接赋值;若不在末尾,需移动后续元素。

对于链表,找到插入位置的前一个节点,修改指针。

删除操作:数组需移动后续元素,链表修改指针即可。

查找操作:数组通过索引直接访问,链表需逐个节点遍历。

2、栈与队列栈的实现:用数组模拟栈,设置栈顶指针。

队列的实现:用链表模拟队列,设置队头和队尾指针。

入栈和出栈操作:入栈时,若栈未满,将元素放入栈顶,栈顶指针加 1。

出栈时,若栈不为空,取出栈顶元素,栈顶指针减 1。

入队和出队操作:入队时,在队尾添加元素。

出队时,取出队头元素,并更新队头指针。

3、二叉树构建二叉树:采用递归方式创建二叉树节点。

先序遍历:先访问根节点,再递归遍历左子树,最后递归遍历右子树。

中序遍历:先递归遍历左子树,再访问根节点,最后递归遍历右子树。

数据结构实验二 线性表

数据结构实验二 线性表

数据结构实验二线性表数据结构实验二线性表1. 实验目的1.1 理解线性表的概念和特性1.2 学习线性表的顺序存储结构和链式存储结构1.3 掌握线性表的基本操作:初始化、插入、删除、查找、修改、遍历等1.4 熟悉线性表的应用场景2. 实验内容2.1 线性表的顺序存储结构实现2.1.1 定义线性表结构体2.1.2 初始化线性表2.1.3 插入元素2.1.4 删除元素2.1.5 查找元素2.1.6 修改元素2.1.7 遍历线性表2.2 线性表的链式存储结构实现2.2.1 定义链表节点结构体2.2.2 初始化链表2.2.3 插入元素2.2.4 删除元素2.2.5 查找元素2.2.6 修改元素2.2.7 遍历链表3. 实验步骤3.1 实现顺序存储结构的线性表3.2 实现链式存储结构的线性表3.3 编写测试程序,验证线性表的各种操作是否正确3.4 进行性能测试,比较两种存储结构的效率差异4. 实验结果与分析4.1 执行测试程序,检查线性表的操作结果是否正确4.2 对比顺序存储结构和链式存储结构的性能差异4.3 分析线性表的应用场景,总结线性表的优缺点5. 实验总结5.1 总结线性表的定义和基本操作5.2 回顾实验中遇到的问题和解决方法5.3 提出对线性表实现的改进方向和思考附件:请参考附件中的源代码和实验报告模板。

法律名词及注释:1. 版权:指对某一作品享有的法律上的权利,包括复制权、发行权、改编权等。

2. 法律责任:指违反法律或合同规定所承担的责任。

3. 保密义务:指个人或组织根据法律、法规、合同等规定需要承担的保密责任。

4.知识产权:指人们在社会实践中所创造的智力劳动成果所享有的权利,包括专利权、著作权、商标权等。

数据结构实验报告(二)栈的应用

数据结构实验报告(二)栈的应用

数据结构实验报告(⼆)栈的应⽤实验说明数据结构实验⼆ 栈的实验——栈的简单应⽤⼀、实验⽬的通过本实验使学⽣了解栈的简单应⽤,熟悉栈的特性及栈在顺序存储上的操作特点,深刻理解栈的基本操作与⽤栈解决应⽤问题的关系;特别训练学⽣使⽤栈解决实际问题的能⼒,为今后⽤栈解决相关问题奠定基础。

⼆、实验内容1.编程实现对给定的⼀组括号序列判断其是否匹配正确。

要求:(1)它必须成对出现,如“(”“)”是⼀对,“[”与“]”是⼀对;(2)出现时有严格的左右关系;(3)可以以嵌套的⽅式同时出现多组多括号,但必须是包含式嵌套,不允许交叉式嵌套。

⽐如“( )”、“[([][])]”这样是正确的,“[(])”或“([()))”或 “(()]”是不正确的。

(4)将处理的括号扩展为针对“()”“[]”“{}”三类。

2.编程实现⼀个简单的⾏编辑功能:⽤户可以输⼊⼀⾏内容,并可进⾏简易编辑。

要求:(1)遇到输⼊部分内容有误时操作退格符“#”表⽰前⼀位⽆效;(2)“@”表⽰之前的内容均⽆效。

实验报告1.实现功能描述编程实现对给定的⼀组括号序列判断其是否匹配正确,将处理的括号扩展为针对“()”“[]”“{}”三类,遇到输⼊部分内容有误时操作退格符“#”表⽰前⼀位⽆效;“@”表⽰之前的内容均⽆效。

2.⽅案⽐较与选择(1)可以使⽤栈和队列来实现。

因为栈的功能⾜以完成题⽬要求,所以初步打算使⽤栈来实现。

(2)因为编写⼀个标准的栈⽐较繁琐,⽽且本题中也没有⽤到所有栈的标准操作,所以通过模拟栈来完成本题。

(3)可以使⽤数组或链表来模拟栈。

因为括号匹配只有3对,所需空间不是很⼤,⼜因为特殊操作#、@可以在数组中通过-1和赋0值实现,因此选择了数组法来模拟栈。

3.设计算法描述(1)定义3个变量,分别⽤于记录()、[]、{}的出现次数。

遇到左符号时变量++,遇到右符号时--,变量为0时表⽰空栈。

当读到#时,再往前读⼀个字符,如果是()、[]、{}中的⼀种,则对其进⾏反向运算,即遇到右符号时++,遇到左符号时--。

数据结构-堆栈和队列实验报告

数据结构-堆栈和队列实验报告

数据结构-堆栈和队列实验报告数据结构堆栈和队列实验报告一、实验目的本次实验的主要目的是深入理解和掌握数据结构中的堆栈和队列的基本概念、操作原理以及实际应用。

通过实际编程实现堆栈和队列的相关操作,加深对其特性的认识,提高编程能力和解决问题的能力。

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

三、实验原理(一)堆栈(Stack)堆栈是一种特殊的线性表,其操作遵循“后进先出”(Last In First Out,LIFO)的原则。

可以将堆栈想象成一个只能从一端进行操作的容器,新元素总是被添加到这一端(称为栈顶),而取出元素也只能从栈顶进行。

堆栈的基本操作包括:1、`push`:将元素压入堆栈。

2、`pop`:弹出堆栈顶部的元素。

3、`peek`:查看堆栈顶部的元素,但不弹出。

(二)队列(Queue)队列是另一种特殊的线性表,其操作遵循“先进先出”(First In First Out,FIFO)的原则。

可以将队列想象成一个排队的队伍,新元素在队尾加入,而取出元素从队首进行。

队列的基本操作包括:1、`enqueue`:将元素加入队列的尾部。

2、`dequeue`:取出并删除队列头部的元素。

3、`front`:查看队列头部的元素,但不取出。

四、实验内容(一)堆栈的实现```pythonclass Stack:def __init__(self):selfitems =def push(self, item):selfitemsappend(item)def pop(self):if not selfis_empty():return selfitemspop()else:return "Stack is empty" def peek(self):if not selfis_empty():return selfitems-1else:return "Stack is empty" def is_empty(self):return len(selfitems) == 0 def size(self):return len(selfitems)```(二)队列的实现```pythonclass Queue:def __init__(self):selfitems =def enqueue(self, item):selfitemsappend(item)def dequeue(self):if not selfis_empty():return selfitemspop(0) else:return "Queue is empty" def front(self):if not selfis_empty():return selfitems0else:return "Queue is empty" def is_empty(self):return len(selfitems) == 0 def size(self):return len(selfitems)```(三)应用实例1、利用堆栈实现括号匹配的验证```pythondef is_balanced_parentheses(exp):stack = Stack()for char in exp:if char in '({':stackpush(char)elif char in ')}':if stackis_empty():return Falsetop = stackpop()if (char ==')' and top!='(') or (char =='}' and top!='{') or (char =='' and top!=''):return Falsereturn stackis_empty()```2、利用队列实现打印杨辉三角的前 n 行```pythondef print_yanghui_triangle(n):queue = Queue()queueenqueue(1)print(1)for i in range(1, n):prev_row =for _ in range(i + 1):num = queuedequeue()prev_rowappend(num)print(num, end="")if _< i:new_num = prev_row_ +(prev_row_ 1 if _> 0 else 0) queueenqueue(new_num)print()```五、实验结果与分析(一)堆栈实验结果对于括号匹配的验证,输入`"((()))"`,输出为`True`,表示括号匹配正确;输入`"((())"`,输出为`False`,表示括号匹配错误。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
{ S.base=(SElemType *)realloc
(S.base, (S.stacksize+STACKINCREMENT)
* sizeof(SElemType));
if (!S.base) exit (OVERFLOW);
S.top = S.base + S.stacksize;
S.stacksize+=STACKINCREMENT;
} // if
*S.top++ = e; return OK; } //Push
Status Pop(SqStack &S, SElemType &e) {
if(S.top == S.base)return ERROR;
e = * -- S.top;
return OK;
} //Pop
Status StackEmpty(SqStack S)
Pop(S,e);
printf ( "%d", e );
}
} // conversion
2、将算法细化为程序代码。
#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 10
#define LISTINCREMENT 100
#define STACK_INIT_SIZE 100
#define OPSETSIZE 7
#define MAXQSIZE 100
typedef int Status;
typedef int ElemType;
typedef int QElemType;
typedef struct QNode
{
QElemType data;
struct QNode *next;
LIAOCHENGUNIVERSITY
计算机学院实验报告
【2016~2017学年第1学期】
【一、基本信息】
【实验课程】
数据结构
【设课形式】
独立□非独立☑
【课程学分】
4
【实验项目】
栈和队列
【项目类型】
基础☑综合□设计□研究创新□其它[]
【项目学时】
4
【学生姓名】
沈凯
【学号】
2015205377
【系别专业】
return TRUE;
return FALSE;
}
void conversion ()
{
SqStack S;
int N,e;
InitStack(&S);
scanf ("%d",&N);
while (N)
{
Push(&S, N % 8);
N = N/8;
}
while (!StackEmpty(S))
软件开发
【实验班组】
15级11班组台
【同组学生】
【实验室名】
综合实验楼
【实验日期】
2016.
【报告日期】
2016.
【二、实验教师对报告的最终评价及处理意见】
实验成绩:(涂改无效)
指导教师签名:张振领2016年 月 日
注:要将实验项目、实验课程的成绩评定及课程考核办法明确告知学生,并报实验管理中心备案
// 构造一个空队列Q
Q.base = (ElemType *) malloc
(MAXQSIZE *sizeof (ElemType));
if (!Q.base) exit (OVERFLOW);
// 存储分配失败
Q.front = Q.rear = 0;rFra bibliotekturn OK;
}
Status EnQueue (SqQueue &Q, ElemType e) {
// 插入元素e为Q的新的队尾元素
if ((Q.rear+1) % MAXQSIZE == Q.front)
return ERROR; //队列满
Q.base[Q.rear] = e;
Q.rear = (Q.rear+1) % MAXQSIZE;
return OK;
}
Status DeQueue (SqQueue &Q, ElemType &e) {
Status Pop(LinkQueue *Q, QElemType *e);
int main()
{
LinkQueue Q;
QElemType e;
InitQueue(&Q);
Push(&Q, 1);
Push(&Q, 2);
Push(&Q, 3);
Push(&Q, 4);
printf("Push(&Q, 1);\nPush(&Q, 2);\nPush(&Q, 3);\nPush(&Q, 4);\n");
{
if (S.base==S.top)
return TRUE;
return FALSE;
}
void conversion () {
InitStack(S);
scanf ("%d",&N);
while (N) {
Push(S, N % 8);
N = N/8;
}
while (!StackEmpty(S)) {
* sizeof(SElemType));
if (!S->base) exit (OVERFLOW);
S->top = S->base + S->stacksize;
S->stacksize += STACKINCREMENT;
} // if
*S->top++ = e;
return OK;
} //Push
实验条件:
具有C语言集成开发环境的计算机
实验设计方案:
栈设计的算法有:
1、初始化栈;
2、入栈;
3、出栈;
4、判断栈是否为空;
5、十进制转换为八进制。
队列设计的算法有:
1、初始化;
2、入队;
3、出队;
4、求队列长度。
实验预习成绩(涂改无效)
合格□
不合格□
【四、实验过程、数据和实验结果记录】
实验方法、步骤、操作过程的记录描述或程序代码。 实验过程中输入/输出数据、程序运行结果的记录。(可加附页)
typedef struct {
QElemType *base; // 动态分配存储空间
int front; // 头指针,若队列不空,
// 指向队列头元素
int rear; // 尾指针,若队列不空,指向
队列尾元素 的下一个位置
} SqQueue;
Status InitQueue (SqQueue &Q) {
}QNode, *QueuePtr;
typedef struct
{
QueuePtr front;
QueuePtr rear;
}LinkQueue;
Status InitQueue(LinkQueue *Q);
Status DestoryQueue(LinkQueue *Q);
Status Push(LinkQueue *Q, QElemType e);
Status Pop(SqStack *S, SElemType *e)
{
if(S->top == S->base)return ERROR;
*e = *--S->top;
return OK;
} //Pop
Status StackEmpty(SqStack S)
{
if (S.base == S.top)
1、根据实验预习阶段的实验设计方案,编写顺序栈的伪C代码如下。
typedef struct {
SElemType *base;
SElemType *top;
int stacksize;
}SqStack;
Status InitStack(SqStack &S) {
S.base = (SElemType *)malloc (STACK_INIT_SIZE*sizeof (SElemType));
}
Status Push(SqStack *S, SElemType e)
{
if (S->top - S->base >= S->stacksize) //栈满
{
S->base = (SElemType *)realloc
(S->base, (S->stacksize + STACKINCREMENT)
【三、实验预习】
实验目的和要求:
1、熟练掌握栈和队列的结构,以及这种数据结构的特点;
2、会定义顺序栈、循环队列,能实现栈、队列的基本操作;
3、会利用栈解决典型问题,如数制转换等。
实验内容和原理或涉及的知识点:
用C语言设计实现栈的初始化、入栈、出栈、判空等功能,并利用栈完成数制转换功能;设计实现循环队列的定义、初始化、入队、出队、求队列长度等功能。
typedef struct
{
SElemType *base;
SElemType *top;
int stacksize;
} SqStack;
Status InitStack(SqStack *S);
Status Push(SqStack *S, SElemType e);
相关文档
最新文档