南邮数据结构实验三图的基本运算及飞机换乘次数最少问题

南邮数据结构实验三图的基本运算及飞机换乘次数最少问题
南邮数据结构实验三图的基本运算及飞机换乘次数最少问题

实验报告

( 2015 / 2016 学年第 2学期)

课程名称数据结构A

实验名称图的基本运算及飞行换乘次数最少问题实验时间年月日指导单位计算机科学与技术系

指导教师

学生姓名班级学号学院(系) 专业

试验一图的基本运算

一、问题描述

(1)验证教材中关于在邻接矩阵和邻接表两种不同存储结构上实现图的基本运算的算法(见程序9.1~程序9.8);

(2)在邻接矩阵存储结构上实现图的深度和广度优先遍历算法;

(3)设计主函数,测试上述运算;

(4)提示:扩充MGraph类,在扩充类上增加DFS和BFS函数;

二、概要设计

图如下所示,显示了名为operation_of_map的(默认文件名)工程,实现了Graph,SeqQueue,结点类ENode,邻接矩阵类MGraph,邻接表LGraph类,包括几种为不同传入类型准备的构造函数。声明所要求的函数,并在后续过程中实现函数功能,最后通过一个main函数求解。

三、详细设计

1.类与类的层次结构

四、程序代码

#include"stdafx.h"

#include

using namespace std;

const int INFTY = 2147483640;

enum ResultCode { Underflow, Duplicate, Failure, Success, NotPresent }; template

class Graph

{

public:

virtual ResultCode Insert(int u, int v, T&w) = 0;

virtual ResultCode Remove(int u, int v) = 0;

virtual bool Exist(int u, int v)const = 0;

protected:

int n, e;

};

template

class SeqQueue

{

public:

SeqQueue(int mSize);

~SeqQueue() { delete[]q; }

bool IsEmpty() const { return front == rear; }

bool IsFull() const { return (rear + 1) % maxSize == front; }

bool Front(T &x)const;

bool EnQueue(T x);

bool DeQueue();

void Clear() { front = rear = 0; }

private:

int front, rear;

int maxSize;

T*q;

};

template

SeqQueue::SeqQueue(int mSize)

{

maxSize = mSize;

q = new T[maxSize];

front = rear = 0;

}

template

bool SeqQueue::Front(T &x)const

{

if (IsEmpty())

{

return false;

}

x = q[(front + 1) % maxSize];

return true;

}

template

bool SeqQueue::EnQueue(T x)//在队尾插入x {

if (IsFull())

{

cout <<"Full"<< endl;

return false;

}

q[rear = (rear + 1) % maxSize] = x;

return true;

}

template

bool SeqQueue::DeQueue()//删除队头元素{

if (IsEmpty())

{

cout <<"Underflow"<< endl;

return false;

}

front = (front + 1) % maxSize;

return true;

}

template

class MGraph :public Graph//邻接矩阵类{

public:

MGraph(int mSize, const T& noedg);

~MGraph();

ResultCode Insert(int u, int v, T&w);

ResultCode Remove(int u, int v);

bool Exist(int u, int v)const;

void DFS();

void BFS();

protected:

T**a;

T noEdge;

void DFS(int v, bool*visited);

void BFS(int v, bool*visited);

};

template

MGraph::MGraph(int mSize, const T&noedg)//构造函数{

n = mSize;

e = 0;

noEdge = noedg;

a = new T*[n];

for (int i = 0;i

{

a[i] = new T[n];

int j = 0;

for (j;j

a[i][j] = noEdge;

a[i][j] = 0;

}

}

template

MGraph::~MGraph()//析构函数

{

for (int i = 0;i

delete[]a[i];

delete[]a;

}

template

ResultCode MGraph::Insert(int u, int v, T&w)//插入函数{

if (u<0 || v<0 || u>n - 1 || v>n - 1 || u == v) return Failure;

if (a[u][v] != noEdge)

return Duplicate;

a[u][v] = w;

e++;

return Success;

}

template

ResultCode MGraph::Remove(int u, int v)//删除函数

{

if (u<0 || v<0 || u>n - 1 || v>n - 1 || u == v)

return Failure;

if (a[u][v] == noEdge)

return NotPresent;

a[u][v] = noEdge;

e--;

return Success;

}

template

bool MGraph::Exist(int u, int v)const//判断边是否存在

{

if (u<0 || v<0 || u>n - 1 || v>n - 1 || u == v || a[u][v] == noEdge) return false;

return true;

}

template

void MGraph::DFS()//深度遍历

{

bool *visited = new bool[n];

for (int i = 0;i

visited[i] = false;

for (int i = 0;i

if (!visited[i])

DFS(i, visited);

delete[]visited;

}

template

void MGraph::DFS(int v, bool *visited)

{

visited[v] = true;

cout <<" "<

for (int i = 0;i

if (a[v][i] != noEdge&&a[v][i] != 0 && !visited[i])

DFS(i, visited);

}

template

void MGraph::BFS() //广度遍历

{

bool *visited = new bool[n];

for (int i = 0;i

visited[i] = false;

for (int i = 0;i

if (!visited[i])

BFS(i, visited);

delete[]visited;

}

template

void MGraph::BFS(int v, bool *visited)

{

SeqQueue q(n);

visited[v] = true;

cout <<" "<

q.EnQueue(v);

while (!q.IsEmpty())

{

q.Front(v);

q.DeQueue();

for (int i = 0;i

if (a[v][i] != noEdge&&a[v][i] != 0 && !visited[i])

{

visited[i] = true;

cout <<" "<< i;

q.EnQueue(i);

}

}

}

template //结点类

class ENode

{

public:

ENode() { nextArc = NULL; }

ENode(int vertex, T weight, ENode *next)

{

adjVex = vertex;

w = weight;

nextArc = next;

}

int adjVex;

T w;

ENode *nextArc;

};

template

class LGraph :public Graph //邻接表类

{

public:

LGraph(int mSize);

~LGraph();

ResultCode Insert(int u, int v, T&w);

ResultCode Remove(int u, int v);

bool Exist(int u, int v)const;

protected:

ENode**a;

};

template

LGraph::LGraph(int mSize)//构造函数

{

n = mSize;

e = 0;

a = new ENode*[n];

for (int i = 0;i

a[i] = NULL;

}

template

LGraph::~LGraph()

{

ENode *p, *q;

for (int i = 0;i

{

p = a[i];

q = p;

while (p)

{

p = p->nextArc;

delete q;

q = p;

}

}

delete[]a;

}

template

bool LGraph::Exist(int u, int v)const//判断边是否存在{

if (u<0 || v<0 || u>n - 1 || v>n - 1 || u == v) return false;

ENode*p = a[u];

while (p&&p->adjVex != v)

p = p->nextArc;

if (!p)

return false;

else return true;

}

template

ResultCode LGraph::Insert(int u, int v, T&w)//插入{

if (u<0 || v<0 || u>n - 1 || v>n - 1 || u == v) return Failure;

if (Exist(u, v))

return Duplicate;

ENode*p = new ENode(v, w, a[u]);

a[u] = p;

e++;

return Success;

}

template

ResultCode LGraph::Remove(int u, int v) //删除{

if (u<0 || v<0 || u>n - 1 || v>n - 1 || u == v) return Failure;

ENode*p = a[u], *q;

q = NULL;

while (p&&p->adjVex != v)

{

q = p;

p = p->nextArc;

}

if (!p)

return NotPresent;

if (q)

q->nextArc = p->nextArc;

else

a[u] = p->nextArc;

delete p;

e--;

return Success;

}

int main() //主函数

{

int n, g;

cout <<"请输入元素的个数:";

cin >> n;

MGraphA(n, INFTY);

LGraphB(n);

cout <<"请输入边的条数:";

cin >> g;

int*a = new i nt[g];

int*b = new i nt[g];

int*w = new i nt[g];

for (int i = 0;i

{

cout <<"请输入边及权值:";

cin >> a[i] >> b[i] >> w[i];

A.Insert(a[i], b[i], w[i]);

B.Insert(a[i], b[i], w[i]);

}

cout <<"该图的深度优先遍历为:"<< endl;

A.DFS();

cout << endl;

cout <<"该图的广度优先遍历为:"<< endl;

A.BFS();

cout << endl;

cout <<"请输入要搜索的边:";

int c, d;

cin >> c >> d;

if (A.Exist(c, d))

cout <<"邻接矩阵中该边存在!"<< endl;

else

cout <<"邻接矩阵中该边不存在!"<< endl;

if (B.Exist(c, d))

cout <<"邻接表中该边存在!"<< endl;

else

cout <<"邻接表中该边不存在!"<< endl;

cout <<"请输入要删除的边:";

int e, f;

cin >> e >> f;

if (A.Remove(e, f) == Success)

cout <<"邻接矩阵中删除该边成功!"<< endl;

else if (A.Remove(e, f) == NotPresent)

cout <<"邻接矩阵中该边不存在!"<< endl;

else

cout <<"输入错误!"<< endl;

if (B.Remove(e, f) == Success)

cout <<"邻接表中删除该边成功!"<< endl;

else if (B.Remove(e, f) == NotPresent)

cout <<"邻接表中该边不存在!"<< endl;

else

cout <<"邻接表中输入错误!"<< endl;

cout <<"删除该边后该图的深度优先遍历为:"<< endl;

A.DFS();

cout << endl;

cout <<"删除该边后该图的广度优先遍历为:"<< endl;

A.BFS();

cout << endl;

return 0;

}

四、测试和调试

试验二飞机最少换乘次数问题

一、问题描述

(1)设有n个城市,编号为0~n-1,m条航线的起点和终点由用户输入提供。寻找一条换乘次数最少的线路方案。

(2)提示:可以使用有向图表示城市间的航线;只要两城市间有航班,则图中这两点间存在一条权为1的边;可以使用Dijkstra算法实现。

(3)思考:如果是城市公交车的最少换乘问题,将如何解决?假如希望使用类似的算法,则图中的边如何设置?

二、概要设计

首先创建抽象类Graph与邻接表类 MGraph,首先创建结点与边也就是城市与航向条数,之后调用邻接表类的迪杰斯特拉算法实现计算

三、详细设计

1.类与类的层次结构:

Graph类MGraph类

四、程序代码

#include"stdafx.h"

#include

#include

using namespace std;

const int INF = 2147483647;

enum ResultCode { Underflow, Duplicate, Failure, Success, NotPresent, OutOfBounds }; template

class Graph//抽象类

{

public:

virtual ResultCode Insert(int u, int v, T w) = 0;

virtual ResultCode Remove(int u, int v) = 0;

virtual bool Exist(int u, int v)const = 0;

protected:

int n, e;

};

template

class MGraph :public Graph //邻接矩阵类

{

public:

MGraph(int mSize, const T noedg);

~MGraph();

ResultCode Insert(int u, int v, T w);

ResultCode Remove(int u, int v);

bool Exist(int u, int v)const;

int Choose(int* d, bool* s);

void Dijkstra(int v, T* d, int* path);

protected:

T**a;

T noEdge;

};

template

MGraph::MGraph(int mSize, const T noedg)

{

n = mSize;

e = 0;

noEdge = noedg;

a = new T*[n];

for (int i = 0;i

{

a[i] = new T[n];

for (int j = 0;j

a[i][j] = noEdge;

a[i][i] = 0;

}

}

template

MGraph::~MGraph()

{

for (int i = 0;i

delete[]a[i];

delete[]a;

}

template

ResultCode MGraph::Insert(int u, int v, T w)

{

if (u<0 || v<0 || u>n - 1 || v>n - 1 || u == v) return Failure;

if (a[u][v] != noEdge)

return Duplicate;

a[u][v] = w;

e++;

return Success;

}

template

ResultCode MGraph::Remove(int u, int v)

{

if (u<0 || v<0 || u>n - 1 || v>n - 1 || u == v) return Failure;

if (a[u][v] == noEdge)

return NotPresent;

a[u][v] = noEdge;

e--;

return Success;

}

template

bool MGraph::Exist(int u, int v)const

{

if (u<0 || v<0 || u>n - 1 || v>n - 1 || u == v || a[u][v] == noEdge) return false;

return true;

}

template

int MGraph::Choose(int* d, bool* s) //求最小d[i]

{

int i, minpos;

T min;

min = INF;

minpos = -1;

for (i = 0;i

if (d[i] <= min&&!s[i])

{

min = d[i];

minpos = i;

}

return minpos;

}

template

void MGraph::Dijkstra(int v, T* d, int* path)//迪杰斯特拉算法

{

int i, k, w;

if (v<0 || v>n - 1)

throw OutOfBounds;

bool* s = new bool[n];

for (i = 0;i

{

s[i] = false;

d[i] = a[v][i];

if (i != v&&d[i]

path[i] = v;

else

path[i] = -1;

}

s[v] = true;

d[v] = 0;

for (i = 1;i

{

k = Choose(d, s);

s[k] = true;

for (w = 0;w

if (!s[w] && (d[k] + a[k][w])

{

d[w] = d[k] + a[k][w];

path[w] = k;

}

}

}

int main()

{

int n, m;

cout <<"请输入城市个数:";

cin >> n;

cout <<"请输入航线条数:";

cin >> m;

MGraphA(n, INF);

int c, f;

cout <<"请输入每条航线的起点和终点:"<< endl;

int i = 0;

for (i;i

{

cout <<"航线"<< i + 1 <<":";

cin >> c >> f;

A.Insert(c, f, 1);

}

char s;

do {

int v, w;

cout <<"请输入你的起点和终点:";

cin >> v >> w;

while (v<0 || w<0 || w>n - 1 || v>n - 1)

{

cout <<"输入错误!请重新输入:";

cin >> v >> w;

}

int* b = new i nt[n];

int* d = new i nt[n];

int* path = new i nt[n];

A.Dijkstra(v, d, path);

int e = n - 1;

int j = 0;

for (j;j

b[j] = -2;

if (w != v)

{

j = w;

while (path[j] != -1)

{

b[e] = path[j];

e--;

j = path[j];

}

if (e == n - 1 || d[j] == INF)

cout <<"该路间无线路!"<< endl;

else

{

cout <<"从"<< v <<"到"<< w <<"的换乘次数最小的线路方案为:";

for (int k = 0;k

{

if (b[k] != -2)

cout << b[k] <<",";

}

cout << w << endl;

}

}

if (w == v)

cout <<"从"<< v <<"到"<< i <<"该路间无需乘飞机!"<< endl;

delete[]b;

delete[]d;

delete[]path;

cout <<"请问是否继续查询路线?请输入Y/N:";

cin >> s;

while (s != 'Y'&&s != 'y'&&s != 'n'&&s != 'N')

{

cout <<"输入错误!请重新输入:";

cin >> s;

}

} while (s == 'Y' || s == 'y');

return 0;

}

五、测试和调试

数据结构实验三(顺序栈的基本操作)

#include<> #include<> #include<> #define MAXSIZE 100 typedef int DataType; typedef struct stack { DataType data[MAXSIZE]; int top; }sqstack; sqstack *InitStack(sqstack *S)出* 1.顺序栈的初始化*┃\n"); printf("\t┃* * *┃\n"); printf("\t┃************************************************************┃\n"); printf("\t┃* * *┃\n"); printf("\t┃* 2.元素的入栈* 3.元素的出栈*┃\n"); printf("\t┃* * *┃\n"); printf("\t┃************************************************************┃\n"); printf("\t┃* * *┃\n"); printf("\t┃* 4.取栈顶元素* 5.判空*┃\n"); printf("\t┃* * *┃\n"); printf("\t┃************************************************************┃\n"); printf("\t┃* *┃\n"); printf("\t┃* 6.将十进制数转换为其他进制数*┃\n"); printf("\t┃* *┃\n"); printf("\t┃************************************************************┃\n"); printf("\t┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛\n"); while ((m='0')&&(m='1')&&(m='2')&&(m='3')&&(m='4')&&(m='5')&&(m='6')&&(m='7')) { printf("\n请选择你需要操作的步骤(0至7):"); fflush(stdin); scanf("%c",&m); switch(m) { case '0': { exit(0); break; }

数据结构实验

实验2 查找算法的实现和应用?实验目的 1. 熟练掌握静态查找表的查找方法; 2. 熟练掌握动态查找表的查找方法; 3. 掌握hash表的技术. ?实验内容 1.用二分查找法对查找表进行查找; 2.建立二叉排序树并对该树进行查找; 3.确定hash函数及冲突处理方法,建立一个hash表并实现查找。 程序代码 #include using namespace std; int main() { int arraay[10]={1,2,3,4,5,6,7,8,9,10}; int binary_search(int a[10],int t); cout<<"Enter the target:"; int target; cin>>target; binary_search(arraay,target); return 0; } int binary_search(int a[10],int t) { int bottom=0,top=9; while(bottom

cout<<"Not present!"; } return 0; } 结果 二叉排序树 #include #include #include using namespace std; typedef int keyType; typedef struct Node { keyType key; struct Node* left; struct Node* right; struct Node* parent; }Node,*PNode; void inseart(PNode* root, keyType key) { PNode p = (PNode)malloc(sizeof(Node)); p -> key = key;

SQL语言的应用 南京邮电大学软件工程与数据库实验报告一

实验报告一 实验名称:SQL语言的应用 指导教师:茅苏 实验类型:验证 实验学时:4*2 实验时间:2012年9月28日 一、实验目的和要求 练习使用SQL SERVER数据库产品,熟练使用查询分析器和企业管理器; 掌握SQL语言中常用的语句:用DDL创建基本表;用DML插入、修改、删除数据;用QL查询数据等。 二、实验环境(实验设备) 硬件:个人计算机; 软件:MS SQL SERVER环境。 三、实验原理及内容 1.用SQL SERVER的企业管理器创建数据库 数据库名称:10001927db 操作步骤:1、单击左侧的SQL Server组 右键 新建SQL Server注册 下一步 在左侧的“可用的服务器”栏选中或输入CC-PC,点击中间 的添加,将CC-PC添加到右侧的“添加的服务器”栏 下一步 选中“登录时使用Windows身份认证”,然后点击下一步 选中“在 现有SQL Server组中添加SQL Server”,然后点击下一步 完 成 关闭。 2、单击左侧的SQL Server组下面可用的已注册子组里面的数据库→ 右键→新建数据库→输入数据库名称10001927db 2.用查询分析器在上一步创建的数据库中完成以下功能 (1)进入查询分析器并选择操作的数据库 操作步骤:1、开始→程序→MS SQL Server→查询分析器 确认SQL Server(s)为CC-PC 选择Windows身份认证 点击确定 2、在工具栏的下拉链表种选择名为10001927db的数据库。 (2)建立基本表:学生、课程和选课,写出DDL语句。 要求:需为每张表建立主键,其他完整性约束可自己添加。

南邮数据结构上机实验二二叉树的基本操作及哈夫曼编码译码系统的实现

实验报告 (2015 / 2016学年第二学期) 课程名称数据结构A 实验名称二叉树的基本操作及哈夫曼编码译码系统的实现 实验时间2016 年 4 月14 日 指导单位计算机科学与技术系 指导教师骆健 学生姓名班级学号 学院(系) 管理学院专业信息管理与信息系统

实习题名:二叉树的基本操作 班级姓名学号日期2016.04.14 一、问题描述 设计递归算法,实现下列二叉树运算:删除一棵二叉树、求一棵二叉树的高度、求一棵二叉树中叶子结点数、复制一棵二叉树、交换一棵二叉树的左右子树。设计算法,按自上到下,从左到右的顺序,按层次遍历一棵二叉树。设计main函数,测试上述每个运算。 二、概要设计 文件tree.cpp中在该文件中定义二叉树的链式存储结构,用队列实现二叉树的层次遍历,并且编写实现二叉树的各种基本操作函数。其中包括结点类BTNode,循环队列类SeqQueue,二叉树类BinaryTree。主函数main的代码如图所示。 三、详细设计 1.类和类的层次设计 程序定义了循环队列SeqQueue类和二叉树BinaryTree类。SeqQueue类主要是用队列实现,层次遍历。运用后序遍历思想,把树分解为左右子树和跟结点再进行左右交换并计算树的高度,最后删除二叉树。

(a )循环队列类 (b )二叉树类 2. 核心算法 程序利用循环队列SeqQueue 类通过不断出队并输出节点的值,将左右孩子入队直到队列为空实现二叉树的层次遍历。并运用后序遍历思想,将二叉树树分解为左右子树和根结点,利用(p -> lChild)和(p -> rChild)计算结点数目,并通过交换结点的左右子树实现左右交换,计算树的高度,最后删除二叉树。核心算法主要是二叉树BinaryTree 类中的High ,Node_num ,Exchange ,Level_traversal 四个函数,其设计流程图如下: SeqQueue -int front, rear; -int maxSize; -BTNode **q; +SeqQueue(int mSize); +~SeqQueue(){delete []q;} +bool IsEmpty() const{return front == rear;} +bool IsFull() const{return (rear + 1) % maxSize == front;} +bool Front(BTNode *&x)const; +bool EnQueue(BTNode *x); +bool DeQueue(); +void Clear(){front = rear = 0;} BinaryTree +BinaryTree():s(100){root = NULL;} +~BinaryTree(){delete []root;} +bool Clear(); +void MakeTree(constT&x,BinaryTree&left,BinaryTree& right); +int High(BTNode*p); +int Node_num(BTNode*p); +BTNode*Copy (BTNode*t); +void Exchange(BTNode *&t); +void Level_traversal(void(*Visit)(T&x)); #SeqQueue s; -void Clear(BTNode* &t); -void Level_traversal(void(*Visit)(T&x),BTNode*t); T T

数据结构实验报告

数据结构实验报告 一.题目要求 1)编程实现二叉排序树,包括生成、插入,删除; 2)对二叉排序树进行先根、中根、和后根非递归遍历; 3)每次对树的修改操作和遍历操作的显示结果都需要在屏幕上用树的形状表示出来。 4)分别用二叉排序树和数组去存储一个班(50人以上)的成员信息(至少包括学号、姓名、成绩3项),对比查找效率,并说明在什么情况下二叉排序树效率高,为什么? 二.解决方案 对于前三个题目要求,我们用一个程序实现代码如下 #include #include #include #include "Stack.h"//栈的头文件,没有用上 typedefintElemType; //数据类型 typedefint Status; //返回值类型 //定义二叉树结构 typedefstructBiTNode{ ElemType data; //数据域 structBiTNode *lChild, *rChild;//左右子树域 }BiTNode, *BiTree; intInsertBST(BiTree&T,int key){//插入二叉树函数 if(T==NULL) { T = (BiTree)malloc(sizeof(BiTNode)); T->data=key; T->lChild=T->rChild=NULL; return 1; } else if(keydata){ InsertBST(T->lChild,key); } else if(key>T->data){ InsertBST(T->rChild,key); } else return 0; } BiTreeCreateBST(int a[],int n){//创建二叉树函数 BiTreebst=NULL; inti=0; while(i

SQL语言的应用实验报告 南京邮电大学

实验报告 2013 /2014 学年第二学期 实验名称SQL语言的应用专业广播电视工程 学生学号11003829 学生姓名____林钢_____ 指导教师胥备

SQL语言的应用实验报告 实验名称:SQL语言的应用 指导教师:胥备 实验类型:验证 实验学时:4*2 实验时间:2014年3月18日 一、实验目的和要求 练习使用SQL SERVER数据库产品,熟练使用查询分析器和企业管理器; 掌握SQL语言中常用的语句:用DDL创建基本表;用DML插入、修改、删除数据;用QL查询数据等。 二、实验环境(实验设备) 硬件:个人计算机; 软件:MS SQL SERVER环境。 三、实验原理及内容 1.用SQL SERVER的企业管理器创建数据库 数据库名称:M11003829 操作步骤:1、单击左侧的SQL Server组→右键→新建SQL Server注册→下一步→在左侧的“可用的服务器”栏选中或输入CC-PC→点击中间 的添加将CC-PC添加到右侧的“添加的服务器”栏→下一步→选 中“登录时使用Windows身份认证”→点击下一步→选中“在现 有SQL Server组中添加SQL Server”→点击下一步→完成→关 闭。 2、单击左侧的SQL Server组下面可用的已注册子组里面的数据库→ 右键→新建数据库→输入数据库名称M11003829 2.用查询分析器在上一步创建的数据库中完成以下功能 1)进入查询分析器并选择操作的数据库 操作步骤:1、开始→程序→MS SQL Server→查询分析器

设置:确认SQL Server(s)为CC-PC 选择Windows身份认证 确定 2、在工具栏的下拉链表种选择名为M11003829的数据库。 2)建立基本表:学生、课程和选课,写出DDL语句 建立学生表、插入数据。 学生 学号姓名年龄性别 S1 WANG 20 M S2 LIU 19 F S3 CHEN 22 M S4 WU 19 M S5 LI 21 F Create TABLE STUDENT ( SNO VARCHAR(7) NOT NULL, SNAME VARCHAR(10)NOT NULL, AGE INT NOT NULL, SEX VARCHAR(7), Primary Key(SNO), ); use M11003829; Insert Into STUDENT Values ('S1' ,'WANG', '20', 'M'); Insert Into STUDENT Values ('S2', 'LIU','19',' F'); Insert Into STUDENT Values ('S3', 'CHEN' ,'22', 'M'); Insert Into STUDENT Values ('S4', 'WU', '19', 'M'); Insert Into STUDENT Values ('S5', 'LI', '21', 'F'); 建立课程表、插入数据。

数据结构 实验报告三

实验三的实验报告 学期: 2010 至_2011 第 2 学期 2011年 3月 27日课程名称: 数据结构专业:信息与计算科学 09 级5班实验编号: 03 实验项目:栈和队列实验指导教师 _冯山_姓名:朱群学号: 2009060548 实验成绩: 一实验目的: (1)熟练掌握栈和队列的抽象数据类型及其结构特点; (2)实现基本的栈和队列的基本操作算法程序。 二实验内容:(类C算法的程序实现,任选其一) (1) 设计与实现基本的堆栈和队列结构下的各种操作(如堆栈的PUSH、POP 等操作)(必做); (2)以表达式计算为例,完成一个可以进行算术表达式计算功能的算法设计 与实现(选做); (3)以迷宫问题为例,以堆栈结构完成迷宫问题的求解算法和程序(选做)。三实验准备: 1) 计算机设备;2)程序调试环境的准备,如TC环境;3)实验内容的算法分 析与代码设计与分析准备。 四实验步骤: 1.录入程序代码并进行调试和算法分析; 2.编写实验报告。 五实验过程 一设计与实现基本的堆栈结构下的各种操作(如堆栈的PUSH、POP等操作)(1)问题描述 实现堆栈各种基本操作,如Pop,Push,GetTop等操作,即输入数据,通过Push入栈,再通过Pop操作输出出栈的元素,即入栈a,b,c,d,出栈d,c,b,a (2)算法实现及基本思想 堆栈是后进先出的线性表,由Push输入元素,Pop输出元素,堆栈的Push 操作思想,即插入元素e为新的的栈顶元素,先判断栈满与否,追加存储空间,然后将e值赋给栈顶指针Top。输入数据时用for循环 堆栈的Pop操作思想,先判断栈是否为空,若栈不空,则删除栈的栈顶元素,用e返回其值, (3)数据结构 栈的顺序存储结构 Typedef struct {

数据结构实验一 实验报告

班级::学号: 实验一线性表的基本操作 一、实验目的 1、掌握线性表的定义; 2、掌握线性表的基本操作,如建立、查找、插入和删除等。 二、实验容 定义一个包含学生信息(学号,,成绩)的顺序表和链表(二选一),使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息; (2) 逐个显示学生表中所有学生的相关信息; (3) 根据进行查找,返回此学生的学号和成绩; (4) 根据指定的位置可返回相应的学生信息(学号,,成绩); (5) 给定一个学生信息,插入到表中指定的位置; (6) 删除指定位置的学生记录; (7) 统计表中学生个数。 三、实验环境 Visual C++ 四、程序分析与实验结果 #include #include #include #include #define OK 1 #define ERROR 0 #define OVERFLOW -2

typedef int Status; // 定义函数返回值类型 typedef struct { char num[10]; // 学号 char name[20]; // double grade; // 成绩 }student; typedef student ElemType; typedef struct LNode { ElemType data; // 数据域 struct LNode *next; //指针域 }LNode,*LinkList; Status InitList(LinkList &L) // 构造空链表L { L=(struct LNode*)malloc(sizeof(struct LNode)); L->next=NULL; return OK;

【VIP专享】南邮数据库实验报告

课内实验报告 课程名:数据库原理与应用任课教师: 专业: 学号: 姓名: 2014/2015学年第2学期 南京邮电大学管理学院

指导教师成绩评定表 题 目学生成绩管理数据库的建立 学生姓名班级学号专业 评分内容评分标准总分评分 平时成绩10%认真对待课程设计,遵守实验室规定,上机不迟到早退,不 做和设计无关的事。 10数据设计是否完整、合理10流程设计是否全面、深入10 设计内容 30% 界面设计是否美观易用10 文档内容是否完整、逻辑清晰10 文档写作 20%文档格式是否符合要求10运行效果20 系统运行 40%现场问题的回答20 总评分 其他问题 成绩指导教师签名翟丹妮日期2015.6.10

……系统设计与开发 一.问题描述 1.场景介绍 学生成绩管理数据库的建立 2.存在的问题 数据录入方式的问题,查询问题,sql语言的编写 3.解决方式 你的系统打算通过什么方式来解决这些问题 使用ACCESS数据库来处理 二.系统分析 1.用户分析 教师、学生 2.流程分析 设计学生数据结构,输入信息,排版建立窗体搜索 3.数据分析 学生(学号,姓名,性别,年龄,籍贯,班级代号)课程(课程号,课程名称,学分数,教师代号) 成绩(学号,课程号,成绩,考试时间) 教师(教师代号,姓名,性别,年龄,职称) (1)构建一个教学管理关系数据库如下: 学生(学号,姓名,性别,年龄,籍贯,班级代号)课程(课程号,课程名称,学分数,教师代号) 成绩(学号,课程号,成绩,考试时间) 教师(教师代号,姓名,性别,年龄,职称) 4.功能分析 针对各类用户,你的系统打算分别提供哪些功能 学生成绩的录入,搜索,排名等

数据结构实验

长春大学计算机学院网络工程专业 数据结构实验报告 实验名称:实验二栈和队列的操作与应用 班级:网络14406 姓名:李奎学号:041440624 实验地点:日期: 一、实验目的: 1.熟练掌握栈和队列的特点。 2.掌握栈的定义和基本操作,熟练掌握顺序栈的操作及应用。 3.掌握链队的入队和出队等基本操作。 4.加深对栈结构和队列结构的理解,逐步培养解决实际问题的编程能力。 二、实验内容、要求和环境: 注:将完成的实验报告重命名为:班级+学号+姓名+(实验二),(如:041340538张三(实验二)),发邮件到:ccujsjzl@https://www.360docs.net/doc/824815553.html,。提交时限:本次实验后24小时之内。 阅读程序,完成填空,并上机运行调试。 1、顺序栈,对于输入的任意一个非负十进制整数,打印输出与其等值的八进制数 (1)文件SqStackDef. h 中实现了栈的顺序存储表示 #define STACK_INIT_SIZE 10 /* 存储空间初始分配量*/ #define STACKINCREMENT 2 /* 存储空间分配增量*/ typedef struct SqStack { SElemType *base; /* 在栈构造之前和销毁之后,base 的值为NULL */ SElemType *top; /* 栈顶指针*/ int stacksize; /* 当前已分配的存储空间,以元素为单位*/ }SqStack; /* 顺序栈*/ (2)文件SqStackAlgo.h 中实现顺序栈的基本操作(存储结构由SqStackDef.h 定义) Status InitStack(SqStack &S) { /* 构造一个空栈S */ S.base=(SElemType *)malloc(STACK_INIT_SIZE*sizeof(SElemType)); if(!S.base) exit(OVERFLOW); /* 存储分配失败*/ S.top=S.base; S.stacksize=STACK_INIT_SIZE; return OK; } int StackLength(SqStack S) { // 返回S 的元素个数,即栈的长度, 编写此函数

南邮课程设计实验报告

课程设计I报告 题目:课程设计 班级:44 姓名:范海霞 指导教师:黄双颖 职称: 成绩: 通达学院 2015 年 1 月 4 日

一:SPSS的安装和使用 在PC机上安装SPSS软件,打开软件: 基本统计分析功能包括描述统计和行列计算,还包括在基本分析中最受欢迎的常见统计功能,如汇总、计数、交叉分析、分类比较、描述性统计、因子分析、回归分析及聚类分析等等。具体如下: 1.数据访问、数据准备、数据管理与输出管理; 2.描述统计和探索分析:频数、描述、集中趋势和离散趋势分析、分布分析与查看、正态性检验与正态转换、均值的置信区间估计; 3.交叉表:计数;行、列和总计百分比;独立性检验;定类变量和定序变量的相关性测度; 4.二元统计:均值比较、T检验、单因素方差分析; 5.相关分析:双变量相关分析、偏相关分析、距离分析; 6.线性回归分析:自动线性建模、线性回归、Ordinal回归—PLUM、曲线估计; 7.非参数检验:单一样本检验、双重相关样本检验、K重相关样本检验、双重独立样本检验、K重独立样本检验; 8.多重响应分析:交叉表、频数表; 9.预测数值结果和区分群体:K-means聚类分析、分级聚类分析、两步聚类分析、快速聚类分析、因子分析、主成分分析、最近邻元素分析; 10. 判别分析; 11.尺度分析; 12. 报告:各种报告、记录摘要、图表功能(分类图表、条型图、线型图、面积图、高低图、箱线图、散点图、质量控制图、诊断和探测图等); 13.数据管理、数据转换与文件管理; 二.数据文件的处理 SPSS数据文件是一种结构性数据文件,由数据的结构和数据的内容两部分构成,也可以说由变量和观测两部分构成。定义一个变量至少要定义它的两个属性,即变量名和变量类型其他属性可以暂时采用系统默认值,待以后分析过程中如果有需要再对其进行设置。在spss数据编辑窗口中单击“变量视窗”标签,进入变量视窗界面,即可对变量的各个属性进行设置。 1.创建一个数据文件数据 (1)选择菜单【文件】→【新建】→【数据】新建一个数据文件,进入数据编辑窗口。窗口顶部标题为“PASW Statistics数据编辑器”。 (2)单击左下角【变量视窗】标签进入变量视图界面,根据试验的设计定义每个变量类型。

数据结构实验三

实验报告 学院(系)名称:计算机科学与工程学院 姓名赵振宇学号20175302 专业 计算机科学与技术 班级 2017级4班实验项目 实验三:图的遍历与应用 课程名称 数据结构与算法 课程代码 0661913 实验时间 2019年5月27日 第3、4节 实验地点 7-219 考核标准实验过程25分 程序运行20分 回答问题15分 实验报告30分 特色功能5分 考勤违纪情况5分 成绩 成绩栏 其它批改意见: 教师签字: 考核内容 评价在实验课堂中的表现,包括实验态度、编写程序过程等内容等。 □功能完善,□功能不全□有小错□无法运行 ○正确○基本正确○有提示○无法回答 ○完整○较完整 ○一般 ○内容极少○无报告 ○有 ○无 ○有 ○无一、实验目的 1、实验目的:通过实验使学生理解图的主要存储结构,掌握图的构造算法、图的深度优先和广度优先遍历算法,能运用图解决具体应用问题。 二、实验题目与要求 要求:第1题为必做题,2,3,4至少选一 1.输入指定的边数和顶点数建立图,并输出深度优先遍历和广度优先遍历的结果。 1)问题描述:在主程序中设计一个简单的菜单,分别调用相应的函数功能:1…图的建立2…深度优先遍历图3…广度优先遍历图0…结束

2)实验要求:在程序中定义下述函数,并实现要求的函数功能:CreateGraph():按从键盘的数据建立图 DFSGrahp():深度优先遍历图 BFSGrahp():广度优先遍历图 3)实验提示: 图的存储可采用邻接表或邻接矩阵; 图存储数据类型定义(邻接表存储) #define MAX_VERTEX_NUM8//顶点最大个数 typedef struct ArcNode {int adjvex; struct ArcNode*nextarc; int weight;//边的权 }ArcNode;//表结点 #define VertexType int//顶点元素类型 typedef struct VNode {int degree,indegree;//顶点的度,入度 VertexType data; ArcNode*firstarc; }Vnode/*头结点*/,AdjList[MAX_VERTEX_NUM]; typedef struct{ AdjList vertices; int vexnum,arcnum;//顶点的实际数,边的实际数}ALGraph; 4)注意问题: 注意理解各算法实现时所采用的存储结构。 注意区别正、逆邻接。 2.教学计划编制问题

数据结构实验1

《数据结构》实验报告 实验序号:1 实验项目名称:概论

附源程序清单: 1. #include void main() { int i; int num[10]; int *p; for(i=0;i<=9;i++) num[i]=i+1; for(p=(num+9);p>=(num+0);p--) printf("%d ",*p); printf("\n"); }

2. #include void main() { void swap(int *a,int *b); int i; int a[10]; int *p,*max,*min; for(i=0;i<10;i++) scanf("%d",&a[i]); max=min=a; for(i=0;i<10;i++) { if(*maxa[i]) min=&a[i]; } p=a; swap(p,max); swap((p+9),min); for(p=a;p<=(a+9);p++) printf("%d ",*p); printf("\n"); } void swap(int *a,int *b) { int temp; temp=*a; *a=*b; *b=temp; } 3. #include #include #include #include typedef struct { char num[5]; char name[20]; float score1; float score2; float score3; float average;

数据结构实验3

数据结构实验3

《数据结构与算法》实验报告 实验序号:3 实验项目名称:链式表的操作学号1507112104 姓名陈忠表专业、班15商智实验地点指导教师林开标实验时间16.11.09 一、实验目的及要求 1. 通过实验理解单链表的逻辑结构; 2. 通过实验掌握单链表的基本操作和具体的函数实现。 二、实验设备(环境)及要求 微型计算机; windows 操作系统; Microsoft Visual Studio 6.0集成开发环境。 三、实验内容与步骤 链式表表示和实现线性表的如下: #include"stdio.h" #include"stdlib.h" typedef struct node //定义结点 { int data; //结点的数据域为整型 struct node *next; //结点的指针域 }ListNode; typedef ListNode * LinkList; // 自

定义LinkList单链表类型 LinkList CreatListR1(); //函数,用尾插入法建立带头结点的单链表 ListNode *LocateNode(LinkList head, int key); //函数,按值查找结点 void DeleteList(LinkList head,int key); //函数,删除指定值的结点 void printlist(LinkList head); //函数,打印链表中的所有值 void DeleteAll(LinkList head); //函数,删除所有结点,释放内存 //==========主函数============== void main() { int num; char ch; LinkList head; head=CreatListR1(); //用尾插入 法建立单链表,返回头指针 printlist(head); //遍历链表 输出其值 printf(" Delete node (y/n):"); //输入

南邮单片机实验报告

南邮单片机实验报告 篇一:南邮数据库实验报告 数据库实验报告 ( XX / XX 学年第二学期)? ? 学号 姓名 指导教师 成绩 一、数据库原理第一次实验 【一】实验内容: 数据库表的建立与管理【二】、实验目的: 学习数据库及表的建立、删除、更新等操作。 注:本次实验题目,除了特殊要求,以T-SQL为主,并将所有语句标注好题号,留存在查询界面上,方便检查。【三】、实验题目及其解答: 1、创建一名为‘test’的数据库; CREATE DATABASE test 2、在“test”数据库中新建一张部门表“部门”,输入列:name(char,10位),ID(char,7位),manager (char,10位)各列均不能为空值。

Solution: use test CREATE TABLE 部门 (ID CHAR(7) NOT NULL,name CHAR(10) NOT NULL,manager CHAR(10) NOT NULL) 结果: 3、在“test”数据库中新建一张员工表,命名为 “员工”。在表中输入以下各列: name(char,10位),personID(char,7位),Sex(char,7位),birthday(datetime),deptID(char,7位),各列均不能为空值。 CREATE TABLE 员工 (name CHAR(10) NOT NULL, personID CHAR(7) NOT NULL, sex CHAR(7) NOT NULL, birthday datetime NOT NULL, deptID CHAR(7) NOT NULL) 结果: 4、修改表的操作练习: 1)将‘部门’表中的列ID设为主键; 2)将‘员工’表中personID设为主键,并将deptID设置为外键,关联到‘部门’表上的‘ID’列; 3)在‘部门’表中,添加列quantity(char, 5); 4) 删除‘员工’表中的列‘sex’; 5)修改‘员工’表中列name为(varchar,8) ALTER TABLE 部门 ADD CONSTRAINT C1 PRIMARY KEY(ID) ALTER TABLE 员工ADD CONSTRAINT C2 PRIMARY

南邮数据结构实验三

实验报告 (2015 / 2016 学年第一学期) 课程名称数据结构 实验名称图的基本运算及飞机换乘次数最少问题 实验时间2015 年12 月 4 日 指导单位计算机科学与技术系 指导教师黄海平 学生姓名陈明阳班级学号Q14010119 学院(系) 贝尔英才专业信息科技强化班

实验报告 实验名称图的基本运算及飞机换乘次数最少问题指导教师黄海平 实验类型验证实验学时 4 实验时间12.4 一、实验目的和要求 飞机最少换乘次数问题。 (1)设有n个城市,编号为0~n-1,m条航线的起点和终点由用户输入提供。寻找一条换乘次数最少的线路方案。 (2)参考:可以使用有向图表示城市间的航线;只要两城市间有航班,则图中这两点间存在一条权值为1的边;可以使用Dijkstra算法实现。 二、实验环境(实验设备) VSUAL STUDIO2015 三、实验原理及内容 对象视图: 源代码: Graph.h

#include #include using namespace std; const int INF = 2147483647; enum ResultCode { Underflow, Duplicate, Failure, Success, NotPresent, OutOfBounds }; template class Graph//抽象类 { public: virtual ResultCode Insert(int u, int v, T w) = 0; virtual ResultCode Remove(int u, int v) = 0; virtual bool Exist(int u, int v)const = 0; protected: int n, e; }; template class MGraph :public Graph //邻接矩阵类 { public: MGraph(int mSize, const T noedg); ~MGraph(); ResultCode Insert(int u, int v, T w); ResultCode Remove(int u, int v); bool Exist(int u, int v)const; int Choose(int *d, bool *s); void Dijkstra(int v, T *d, int *path); protected: T **a; T noEdge; }; template MGraph::MGraph(int mSize, const T noedg) { n = mSize; e = 0; noEdge = noedg; a = new T*[n]; for (int i = 0; i

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

南京工程学院实验报告 1.熟悉上机环境,进一步掌握语言的结构特点。 2.掌握线性表的顺序存储结构的定义及实现。 3.掌握线性表的链式存储结构——单链表的定义及实现。 4.掌握线性表在顺序存储结构即顺序表中的各种基本操作。 5.掌握线性表在链式存储结构——单链表中的各种基本操作。 二、实验内容 1.顺序线性表的建立、插入及删除。 2.链式线性表的建立、插入及删除。 三、实验步骤 1.建立含n个数据元素的顺序表并输出该表中各元素的值及顺序表的长度。 2.利用前面的实验先建立一个顺序表L={21,23,14,5,56,17,31},然后在第i个位置插入元素(学号)。 3.建立一个带头结点的单链表,结点的值域为整型数据。要求将用户输入的数据按尾插入法来建立相应单链表。 四、程序主要语句及作用 程序1的主要代码(附简要注释) #include #include "stdio.h" #include #include typedef struct BSTNODE { int data; struct BSTNODE *lchild; struct BSTNODE *rchild; }BSTNODE; BSTNODE* initBST(int n, BSTNODE *p) { if(p==NULL) { p=(BSTNODE*)malloc(sizeof(BSTNODE)); p->lchild=NULL;

p->rchild=NULL; p->data=n; } else if(n>p->data) p->rchild=initBST(n,p->rchild); else p->lchild=initBST(n,p->lchild); return p; } void inorder(BSTNODE *BT){ if(BT!=NULL){ inorder(BT->lchild); printf("%d",BT->data); inorder(BT->rchild); } } BSTNODE *search_btree(BSTNODE *root,int key) { if(!root) {printf("Emptu btree\n"); return root;} while(root->data!=key) { if(keydata) root=root->lchild; else root=root->rchild; if(root==0) { printf("Search Failure\n"); break; } }/*while(root->info!=key*/ if(root!=0) printf("Successful search\n key%d\n",root->data); }/* *search_btree(root,key) */ int main() { BSTNODE *p=NULL; int i,n,sd; int a[100]; printf("enter the number of nodes:"); scanf("%d",&n); printf("enter the number of the tree:"); for(i=0;i #include

数据结构实验一 实验报告

班级: 姓名: 学号: 实验一线性表的基本操作 一、实验目的 1、掌握线性表的定义; 2、掌握线性表的基本操作,如建立、查找、插入与删除等。 二、实验内容 定义一个包含学生信息(学号,姓名,成绩)的顺序表与链表(二选一),使其具有如下功能: (1) 根据指定学生个数,逐个输入学生信息; (2) 逐个显示学生表中所有学生的相关信息; (3) 根据姓名进行查找,返回此学生的学号与成绩; (4) 根据指定的位置可返回相应的学生信息(学号,姓名,成绩); (5) 给定一个学生信息,插入到表中指定的位置; (6) 删除指定位置的学生记录; (7) 统计表中学生个数。 三、实验环境 Visual C++ 四、程序分析与实验结果 #include #include #include #include #define OK 1 #define ERROR 0 #define OVERFLOW -2 typedef int Status; // 定义函数返回值类型 typedef struct

{ char num[10]; // 学号 char name[20]; // 姓名 double grade; // 成绩 }student; typedef student ElemType; typedef struct LNode { ElemType data; // 数据域 struct LNode *next; //指针域 }LNode,*LinkList; Status InitList(LinkList &L) // 构造空链表L { L=(struct LNode*)malloc(sizeof(struct LNode)); L->next=NULL; return OK; } Status GetElem(LinkList L,int i,ElemType &e) // 访问链表,找到i位置的数据域,返回给 e { LinkList p; p=L->next;

相关文档
最新文档