数据结构第一次上机

合集下载

数据结构第一次上机作业

数据结构第一次上机作业

数据结构第一次上机作业一.上机时间:2010年9月9日二.报告时间:2010年9月13日三.摘要1.试验目的:熟悉线性表的基本操作2.实验方法:(下面)3.实验结果(下面)四.内容(1)问题重新陈述题目的要求是随机的给四个人发牌,要求(斗地主为例,这个不用处理花色和王)1.每人手里要有13张牌(不用大小王,)2.每人每次手里的牌不能都是一样的(即:手中的牌是没有固定规律的)3.每轮每张牌只能出现一次,每个花色各有13张4.每人手中的牌要按照花色的顺序出现,再在同种花色中按照从小到大的顺序放置(2)验证:看是否满足上面的要求1.由于每张牌具有唯一性,则看每种花色的每张牌是否都出现过一次2.总数要是523.测试的方法:做差法(排序,就行做差,b[i+1]-b[i])4.测试的内容:差值是否为15.判别标准:把花色转化成数字(分别用13乘以0,1,2,3在加上拍死的数字),看是否52个数字全出现了五.所用技术1.排序方法:由于每副扑克有54张牌,但是桥牌之需要出去大小王的52张。

因此用1-52同52个数字代替每张牌2.J,Q,K,A的处理:让J相当于11,Q相当于12,K相当于13,A相当于13.花色及大小的处理:52张牌除以13所得的商1,2,3和4分别表示四种花色,所得的余数表示牌的数字(A(1),2,3,4,5,6,7,8,9,10,11(J),12(Q),13(K))或者4.随机化洗牌及发牌的方法:运用srand(time(0)), rand()或者#include<stdlib.h>, #include <time.h>例如:#include<stdlib.h>#include<time.h>#include<stdio.h>main(){int r;srand((unsigned)time(NULL));r=random(10);printf("%d\n" ,r);r=random(10);printf("%d\n" ,r);getch();}还有int random(int a,int b)//产生一个它们之间并包括它们的随机数{if(a>b){a^=b^=a^=b;}//交换a,b值,使a小,b大int x=rand()%(b-a+1)+a;}5.洗牌程序void ordinary_shuffle(struct puke pk[52]){for(i=0;i<52;i++){ int t;int tds=0,ths=0;t=rand()%52;/*取随机数*/tds=pk[i].dianshu;/*进行牌与牌之间的随机替换*/ ths=pk[i].huase;pk[i].dianshu=pk[t].dianshu;pk[i].huase=pk[t].huase;pk[t].dianshu=tds;pk[t].huase=ths;}}或者void reset(){produce_seed();for(int i=1;i<=54;i++)v.push_back(i);}void random(){for(int i=0;i<random(m,n);i++)//mn为具体的数字{int index=random(1,53);v[index]^=v[0]^=v[index]^=v[0];}6.六.存在问题1.在验证程序输入时不知道花色怎么处理2.排序时不知道怎么用C语言进行描述3.关于时间和空间复杂度的计算比较混乱4.不能正确的使用C语言编译自己所想七.解决方法1.进行二维数组进行输入用a[j][i]表示某一具体的牌,其中j表示花色,i表示牌数(A,2,3,4,5,6,7,8,9,10,J,Q,K)2.八.设计程序#include <string>#include <iostream>#include <vector>#include <Windows.h>using namespace std;vector<int> v;//储存扑克的容器void produce_seed()//产生种子{SYSTEMTIME sys;GetLocalTime( &sys );srand(sys.wMilliseconds*sys.wSecond*sys.wMinute);//这样理论上能得到3600*1000种牌型}int random(int a,int b)//产生一个它们之间并包括它们的随机数{if(a>b){a^=b^=a^=b;}//交换a,b值,使a小,b大int x=rand()%(b-a+1)+a;return x;}/*产生54张打乱顺序的扑克*/void reset(){produce_seed();for(int i=1;i<=54;i++)v.push_back(i);}void random(){for(int i=0;i<random(200,300);i++)//洗牌200至300次{int index=random(1,53);v[index]^=v[0]^=v[index]^=v[0];}}void paint(const vector<int>& v,bool type=false)//type=false不显示花型{for(int i=0;i<v.size();i++){cout<<" ";if(v[i]==53)cout<<(char)1;else if(v[i]==54)cout<<(char)2;else{if(type)cout<<(char)((v[i]+2)%4+3);if((v[i]+3)/4==13)cout<<"K";else if((v[i]+3)/4==12)cout<<"Q";else if((v[i]+3)/4==11)cout<<"J";else if((v[i]+3)/4==1)cout<<"A";else cout<<(v[i]+3)/4;}//cout<<"="<<v[i];}cout<<endl<<endl;}void sort(vector<int>& v){for(int i=0;i<v.size()-1;i++)for(int j=i+1;j<v.size();j++){if(v[i]<v[j])v[i]^=v[j]^=v[i]^=v[j];if(v[i]<53&&v[j]<53)if(((v[i]+3)/4+10)%13<((v[j]+3)/4+10)%13)v[i]^=v[j]^=v[i]^=v[j];}}void main(){reset();random();vector<int> v1(v.begin(),v.begin()+17);vector<int> v2(v.begin()+17,v.begin()+34);vector<int> v3(v.begin()+34,v.begin()+51);vector<int> v4(v.begin()+51,v.end());sort(v1);sort(v2);sort(v3);sort(v4);paint(v1,/n);paint(v2,/n);paint(v3,/n);paint(v4,/n);system("pause");}九.验证程序#include<stdio.h>void main(){int i,j,m,n;int a[4][13],b[52];flag=0;printf(“Iuput number:/n”);for(i=0;i<13;i++)for(j=0;j<4;j++){Scanf(“%d”,&a[j][i]); /*进行输入*/if(j==0) b[i]= a[j][i];else if(j==1) b[i+j*13]=a[j][i];else if(j==2) b[i+j*13]= a[j][i];else(j==3) b[i+j*13]= a[j][i];}for(i=0;i<52) /*进行验证*/{m=b[i+1]-b[i];if(m!=1) printf(“thit it wrong/n”); break;elso i=i+1;}}十.运行结果十一.。

C++与数据结构 第一次上机实验——线性表

C++与数据结构 第一次上机实验——线性表

实验一线性表数据结构(C++语言描述)实验报告实验一线性表一、实验目的和要求:1、掌握线性表顺序存储结构和链式存储结构的基本思想;2、掌握顺序表和单链表的基本操作。

二、实验原理:1、线性表的定义:数据之间存在一对一的线性关系的数据结构的称为线性结构,也可称为线性表。

2、顺序存储结构:用一组连续的存储单元依次存储数据元素,数据元素之间的逻辑关系是由元素的存储的存储位置来表示的,通常用一维数组来表示。

顺序表的优点:存储密度大、空间利用率高、,无需为表中元素之间的逻辑关系而增加额外的存储空间。

顺序表的缺点:插入和删除操作需要移动大量的元素;表的容量难以确定;造成空间的“碎片”。

在程序设计语言中,通常用一维数组来表示表的存储区域。

假设用data[ListSize]来表示一段顺序表,其中ListSize是一个根据实际问题规模定义的足够大的整数,另外用一个实际变量length来表示当前实际元素的个数,表中的数据从data[0]开始依次存放,表空时length=0.3、链式存储结构:用一组任意的存储单元存储数据元素,数据元素之间的逻辑关系是用指针来表示的。

链式存储结构的优点:插入和删除操作方便省时。

链式存储结构的缺点:存储空间的开销大。

链式存储的方法是使用结点构造链。

每个结点分为数据域和指针域两部分组成。

数据域用来存放数据元素,指针域用来存放后继存储单元的地址。

三、实验内容1、对于给定的单链表L,设计一个算法,删除L中值为x的结点的直接前驱结点。

2、已知两个单链表LA和LB分别表示两个集合,其元素递增排列,设计算法求出LA和LB的交集C,要求C同样以递增的单链表形式存储。

四、实验设计:1、(1)伪算法:建立链表L;循环搜索数据值为x的前一结点,若已至表尾,且其值不为value,警告,退出程序;否则,重新拉链,将数值为x的结点的前一结点标记,将被标记的结点断开,回收被删除的结点的内存空间,将链表长度减1。

(2)实验代码://对给定的链表L,设计一个算法,删除L中值为x的结点的直接前驱结点#include<stdlib.h>#include<iostream>using namespace std;class ListNode //建立结点类{public:char data;ListNode *link;ListNode(){link=NULL;}ListNode(int&item,ListNode *next=NULL){data=item;link=next;}};class List //建立链表类{public:List(){ListNode *q=new ListNode;first=last=q;}void Great(List L);voidInsertL(char zifu);void Print();charRemovevalue(char value);private:ListNode *first,*last;int length;};void List::Great(List L) //建立链表函数{char n;intl,i;cout<<"请输入链表的长度:";cin>>l;cout<<"请输入数据:";for(i=1;i<l+1;i++){ cin>>n;L.InsertL(n);}L.length++;}void List::InsertL(char zifu){ ListNode *newcode=new ListNode;newcode->data =zifu;newcode->link=NULL;if(first==NULL){first=newcode;last=newcode;}else last->link=newcode;last=newcode;}char List ::Removevalue(char value) //该函数实现删除值为x的结点的前一结点{ListNode *p=first,*q,*h;while(p->link!=NULL&&p->link->data!=value) {h=p;p=p->link; }if(p->link==NULL&&p->data!=value)return 0;q=h->link;h->link = q->link;delete q;length --;return value;}void List::Print() //打印链表{ListNode *p;p=first->link;while(p!=NULL){cout<<p->data<<" ";p=p->link;}cout<<endl;}int main(){char value;List a;a.Great(a);cout<<"请输入要删除的的数值;"; cin>>value;a.Removevalue(value);a.Print();system("PAUSE");}(3)、运行结果2、(1)伪算法:要实现此程序核心问题是寻找集合LA和LB的交集,并将其输出,设计思路:寻找LA的第i个结点,寻找LB的第j个结点,利用嵌套循环,实现链表LA的每一个结点都和LB的结点进行比较,将相等的元素输出到链表LD中;对链表LD中的元素进行去重,然后将链表中没有重叠的元素存入到链表LC中,将链表LC输出。

最新大连理工大学数据结构(一)上机作业答案——张老师

最新大连理工大学数据结构(一)上机作业答案——张老师
#define ERROR 0
typedef int ElemType;
typedef int Status;
typedef struct LNode{
ElemType data;
struct LNode *next;
}LNode,*LinkList;
void CreateList(LinkList &L,int n){
s->data=m;
s->next=NULL;
p->next=s;
}
}
void ReverseList(LinkList &L){
LNode *p,*q;
if(L->next&&L->next->next){
p=L->next;
q=p->next;
p->next=NULL;
while(q){
p=q;
typedef int Status;
#define LIST_INIT_SIZE 100
#define LISTTINCREMENT 10
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;
//创建空顺序表
Status InitList_Sq(SqList &L){
1.将顺序表逆置,要求用最少的附加空间。
参考答案
#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define OK 1
#define ERROR 0

数据结构《数据结构》上机实验

数据结构《数据结构》上机实验
数据结构
上机实验
主讲教师:袁凌
数据结构
实验目的
1.加深对数据结构和算法的理解,进一步 提高学生编程能力; 2.培养和提高学生分析问题与解决问题的 综合能力; 3.整理资料,撰写规范的实验报告。
华中科技大学计算机学院
2
数据结构
实验要求
1. 独立完成,完全雷同者记0分;
2. 撰写实验报告,每个实验报告如下内容: 一、问题描述 二、算法和数据结构设计 三、C语言程序实现 四、程序测试 五、复杂度分析
华中科技大学计算机学院 8
实验题目
第二次上机试验
实验(三) 基于二叉链表,实现二叉树的下列运算。 ① 二叉树生成; ② 前序、中序和后序遍历; ③ 计算叶子数目; ④ 按层次遍历; ⑤ 求二叉树高度; 提示: ⑴ 提供一个实现功能的演示系统 ⑵ 具体物理结构和数据元素类型自行选定 ⑶ ②、③和⑤运算分别采用递归和非递归算法实现
⑶ 线性表数据可以使用磁盘文件永久保存
华中科技大学计算机学院
6
数据结构
实验题目
第一次上机试验
实验(二) 基于链式存储结构,实现线性表的基本的、常见 的运算。
提示:
⑴ 提供一个实现功能的演示系统 ⑵ 具体物理结构和数据元素类型自行选定
⑶ 线性表数据可以使用磁盘文件永久保存
华中科技大学计算机学院
7Байду номын сангаас
数据结构
3. 《实验报告》和《源程序》,以班为单位提交光盘。
华中科技大学计算机学院
3
数据结构
报告格式
华中科技大学计算机学院
4
数据结构
报告格式
华中科技大学计算机学院
5
数据结构
实验题目

数据结构上机操作指导

数据结构上机操作指导

程序设计是实践性很强的过程,任何程序最终都必须在计算机上运行,以检验程序的正确与否。

因此在学习程序设计中,一定要重视上机实践环节,通过上机可以加深理解C语言的有关概念,以巩固理论知识,另一方面也可以培养程序调试的能力与技巧。

一.C语言程序的上机步骤按照C 语言语法规则而编写的C 程序称为源程序。

源程序由字母、数字及其它符号等构成,在计算机内部用相应的ASCII 码表示,并保存在扩展名为“.C”的文件中。

源程序是无法直接被计算机运行的,因为计算机的CPU 只能执行二进制的机器指令。

这就需要把A SCII 码的源程序先翻译成机器指令,然后计算机的CPU 才能运行翻译好的程序。

源程序翻译过程由两个步骤实现:编译与连接。

首先对源程序进行编译处理,即把每一条语句用若干条机器指令来实现,以生成由机器指令组成的目标程序。

但目标程序还不能马上交计算机直接运行,因为在源程序中,输入、输出以及常用函数运算并不是用户自己编写的,而直接调用系统函数库中的库函数。

因此,必须把“库函数”的处理过程连接到经编译生成的目标程序中,生成可执行程序,并经机器指令的地址重定位,便可由计算机运行,最终得到结果。

C 语言程序的调试、运行步骤可以用图A-1 表示:图A-1 C 语言程序的调试、运行步骤图A-1 中,虚线表示当某一步骤出现错误时的修改路线。

运行时,无论是出现编译错误、连接错误,还是运行结果不对(源程序中有语法错误或逻辑错误),都需要修改源程序,并对它重新编译、连接和运行,直至将程序调试正确为止。

除了较简单的情况,一般的程序很难一次就能做到完全正确。

在上机过程中,根据出错现象找出错误并改正称为程序调试。

我们要在学习程序设计过程中,逐步培养调试程序目标程序的能力,它不可能靠几句话讲清楚,要靠自己在上机中不断摸索总结,它可以说是一种经验积累。

程序中的错误大致可分为三类:²程序编译时检查出来的语法错误;²连接时出现的错误;²程序执行过程中的错误。

〈数据结构〉上机实验指导

〈数据结构〉上机实验指导

〈数据结构〉上机实验指导数据结构是计算机科学中的一门重要课程,它研究的是数据的组织、存储和管理方式,以及对数据进行操作和处理的算法。

上机实验是数据结构课程的重要组成部分,通过实践操作,能够更好地理解和掌握数据结构的基本概念、算法和应用。

在进行〈数据结构〉上机实验之前,首先需要准备实验环境。

通常情况下,我们会使用一种编程语言来实现数据结构的相关操作,比如C++、Java等。

根据自己的实际情况和实验要求,选择一种合适的编程语言,并确保在实验环境中已经正确安装了相应的编译器或解释器。

接下来,我们可以开始进行具体的上机实验了。

下面以链表为例,介绍一下〈数据结构〉上机实验的指导步骤和要求:1. 实验目的:掌握链表的基本概念、操作和应用,理解链表与数组的区别和联系。

2. 实验原理:链表是一种动态数据结构,它由一系列的节点组成,每个节点包含数据和指向下一个节点的指针。

链表的特点是插入和删除操作的时间复杂度为O(1),但是查找操作的时间复杂度为O(n)。

3. 实验步骤:3.1 创建链表:首先,我们需要定义一个链表的结构体,包含数据和指针两个成员变量。

然后,通过动态内存分配来创建链表的节点,并将节点之间通过指针连接起来,形成一个完整的链表。

3.2 插入节点:可以在链表的任意位置插入一个新的节点。

插入节点的操作包括:创建一个新的节点,将新节点的指针指向插入位置的下一个节点,将插入位置的前一个节点的指针指向新节点。

3.3 删除节点:可以删除链表中的任意一个节点。

删除节点的操作包括:将要删除的节点的前一个节点的指针指向要删除的节点的下一个节点,然后释放要删除的节点的内存空间。

3.4 遍历链表:可以通过遍历链表来访问链表中的每一个节点,并对节点进行相应的操作。

遍历链表的操作包括:从链表的头节点开始,依次访问每个节点,直到链表的尾节点。

3.5 查找节点:可以根据节点的值来查找链表中的某一个节点。

查找节点的操作包括:从链表的头节点开始,依次比较每个节点的值,直到找到目标节点或者链表结束。

数据结构上机实验报告

数据结构上机实验报告

数据结构上机实验报告学院:电子工程学院专业:信息对抗技术姓名:学号:教师:饶鲜日期:目录实验一线性表 ........................................................................................................ - 4 -一、实验目的.................................................................................................... - 4 -二、实验代码.................................................................................................... - 4 -三、实验结果.................................................................................................. - 14 -四、个人思路.................................................................................................. - 15 - 实验二栈和队列 .................................................................................................. - 15 -一、实验目的.................................................................................................. - 15 -二、实验代码.................................................................................................. - 16 -三、实验结果.................................................................................................. - 24 -四、个人思路.................................................................................................. - 25 - 实验三数组 .......................................................................................................... - 26 -一、实验目的.................................................................................................. - 26 -二、实验代码.................................................................................................. - 26 -三、实验结果.................................................................................................. - 28 -四、个人思路.................................................................................................. - 28 - 实验四树 .............................................................................................................. - 29 -一、实验目的.................................................................................................. - 29 -二、实验代码.................................................................................................. - 29 -三、实验结果.................................................................................................. - 39 -四、个人思路.................................................................................................. - 39 -实验一线性表一、实验目的1.熟悉线性表的顺序和链式存储结构2.掌握线性表的基本运算3.能够利用线性表的基本运算完成线性表应用的运算二、实验代码1.设有一个线性表E={e1, e2, … , e n-1, e n},设计一个算法,将线性表逆置,即使元素排列次序颠倒过来,成为逆线性表E’={ e n, e n-1 , … , e2 , e1 },要求逆线性表占用原线性表空间,并且用顺序表和单链表两种方法表示,分别用两个程序来完成。

数据结构教程上机

数据结构教程上机

数据结构教程上机概述数据结构是计算机科学中非常重要的一个概念,它涉及到如何有效地组织和存储数据,以便在计算机程序中进行高效的操作。

数据结构可以是各种各样的,比如数组、链表、栈、队列、树、图等等。

在数据结构的学习过程中,除了理论知识的掌握外,实践上机也是非常关键的一部分。

在本教程中,我们将介绍一些常见的数据结构,并结合具体的上机实例,帮助读者更好地理解和应用数据结构。

实验环境在进行数据结构的上机实验之前,我们需要准备一些必要的工具和环境。

以下是我们推荐的实验环境:•操作系统:Windows、Mac OS、Linux等•编程语言:C、C++、Java等•开发环境:Visual Studio、Eclipse、IntelliJ IDEA等在本教程中,我们将以C语言为例,并使用Visual Studio作为开发环境。

读者可以根据自己的需求选择适合自己的环境和语言。

实验内容本教程的实验内容包括以下几个部分:1.数组操作:包括数组的创建、读取和修改元素、数组的遍历等。

2.链表操作:包括链表的创建、插入和删除节点、链表的遍历等。

3.栈和队列操作:包括栈和队列的创建、入栈和出栈、入队和出队等。

4.树操作:包括二叉树的创建、遍历和查找节点等。

5.图操作:包括图的创建、遍历和搜索算法等。

在每个实验内容中,我们将提供具体的上机实例,并提供相应的代码和实验步骤。

读者可以按照我们给出的步骤进行实验,并通过调试和运行代码来加深对数据结构的理解。

实验步骤下面以数组操作为例介绍实验步骤:1.打开Visual Studio,创建一个新的C语言项目。

2.在项目中创建一个新的源文件,命名为array.c。

3.在array.c中编写代码,实现以下功能:–创建一个整型数组并初始化。

–读取和修改数组中的元素。

–遍历数组并输出每个元素的值。

示例代码如下:```c #include <stdio.h>int main() { int arr[5] = {1, 2, 3, 4, 5};// 读取和修改元素printf(\。

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

武汉理工大学
学生实验报告书
实验课程名称数据结构
开课学院计算机科学与技术学院
指导老师姓名钟忺
学生姓名刘金科
学生专业班级计算机类m1502 2015 —2016 学年第2 学期
实验课程名称:高级语言程序设计
实验二:
2、调试问题及解决办法:
实验一中合并同类项时只合并了第一项,通过检查发现内循环移位指针只能初始化一次。

实验一调试时一直出现“无法计算值”的错误,通过检查发现初始化链表时最后没有给尾指针赋NULL。

实验二不清楚如何去构建不同的密码的值,如何去传入,最后通过检查,定义了一个数组去保存n个人中的密码值
实验二中循环中不知道如何去改变每一次出局后的第一个人,最后通过在每一个求余运算当中,加上上一次出局的的编号;
一、实验结果及分析(包括结果描述、实验现象分析、影响因素讨论、综合分析和结论等)1.结果描述
实验一:经过几次修改指针,最终求出了正确的答案,刚开始对于指数系数的输入比较乱,也就是说输入的提示不够,最后经过增加,输入变得很有次序实验二:次试验的输出比较简单,输出正确。

2.影响因素讨论
①对于实验一:对于用户的提示输入很重要,什么时候提示用户输入,这也给用户的操作提供了很清晰的流程。

②对于实验一:由于多项式的乘法和加法的运算法则不一样,因此在做实验时,需要给加法多一层指数的判断。

③对于实验二:约瑟夫循环问题,如果当n的值比较大时,程序的执行时间就会比较长。

3.算法分析(包括时间和空间)
实验一:T(n)=O(n*n)。

相关文档
最新文档