数据结构实验报告三,数据结构实验报告总结,数据结构实验报告模板,《数据结构》实验报告 QQ空间素材网 > 数据结构实验报告 > 数据结构实验报告三,数据结构实验报告总结,数据结构实验报告模板,《数据结构》实验报 正文

数据结构实验报告三,数据结构实验报告总结,数据结构实验报告模板,《数据结构》实验报告

发布时间:2014-01-09 来源: 数据结构实验报告

《算法与数据结构》实验报告学院 专业 姓名 学号实验 1: 约瑟夫环问题(3 学时)问题描述 .一 将编号为 1,2,…,n 的 n 个人按顺时针方向围坐一圈,每人持有一个密码(正整数...

合肥师范学院 实 验 报 告 册 2014 / 2015 学年 第 1 学期 系 别 计算机科学与技术系 数据结构 软件工程 软件(2)班 汤少伟 1310421016 王群芳 实验课程 专 班 姓 学 业 级 名 号 指导教师 实验名称 实验(一)——线性结构 课时 实验报告成绩 6 2 4 2 2 实验(二)——树 实验(三)——图 实验(四)——查找 实验(五)——内部排序 备注: 《数据结构》实验 班级: 学号: 姓名: 实验一 ——线性结构 一、实验目的 1. 理解线性表的顺序存储结构; 2. 熟练掌握顺序表结构及其有关算法的设计; 3. 理解线性表的链式存储结构; 4. 熟练掌握动态链表结构及其有关算法的设计; 5. 根据具体问题的需要,设计出合理的表示数据的链表结构,并设计相关算法; 6. 深入了解栈和队列的特性,以便在实际问题背景下灵活运用他们,同时巩固对这两种结 构的构造方法的理解。 二、 实验内容 1. 2. 3. 以顺序表作存储结构,实现线性表的插入、删除; 以单链表作存储结构,实现有序表的合并; 利用栈(以顺序栈作存储结构)实现进制转换,并用队列(以链队列作存储结构)计算 并打印杨辉三角。 三、实验预习内容 1. 以顺序表作储存结构,实现线性表的插入、删除。

#define maxsize 20 typedef int elemtype;

typedef struct { elemtype data[maxsize];

int len;

} Seqlist;

#include <iostream.h>

void creat(Seqlist &L) { int i;

cout<<"请输入线性表的长度,不能大于"<<maxsize<<':';

cin>>L.len;

cout<<"请输入表中元素:";

for(i=0;i<L.len;i++) cin>>L.data[i];

} int insert(Seqlist &L,elemtype x,int m) { int i;

if (L.len==maxsize ) { cout<<"表已满,无法插入!";

return 0;

} for(i=L.len-1;i>=0&&

i>=L.len-m ;i--) L.data[i+1]=L.data[i];

L.data[i+1]=x;

L.len++;

return 1;

} 1 《数据结构》实验 班级: 学号: 姓名: int listdelete(Seqlist &L,int s) {int i;

for(i=L.len-1;i>=0&&

i>=L.len-s ;i--) L.data[i]=L.data[i+1] L.len--;

return 1;

} void print(Seqlist L) { int i,m=1;

for(i=0;i<L.len;i++) if (m==1) { cout<<'('<<L.data[i];

m++;

} else cout<<','<<L.data[i];

cout<<')'<<endl;

} void main() { Seqlist L;

elemtype x;int m;

creat(L);

cout<<"插入前:"<<endl;

print(L);

cout<<"请输入插入位置(第几个元素)";

cout<<"不能大于"<<L.len<<':';cin>>m;

cout<<"请输入待插入元素:";

cin>>x;

if ( insert(L,x,m) ) { cout<<"插入后"<<endl;

print(L);

} } 四、上机实验 实验源程序。

1. 以顺序表作储存结构,实现线性表的插入、删除。

#define maxsize 20 typedef int elemtype;

typedef struct { elemtype data[maxsize];

int len;

} Seqlist;

#include <iostream.h>

void creat(Seqlist &L) { int i;

cout<<"请输入线性表的长度"<<maxsize<<':';

cin>>L.len;

cout<<"请输入表中元素";

for(i=0;i<L.len;i++) 2 《数据结构》实验 班级: 学号: 姓名: cin>>L.data[i];

} //删除 int listdelete(Seqlist &L,int i,elemtype e)//i 序号 {int j;

if(i<1||i>L.len) return 0;

i--;//i-1 下标 e=L.data[i];

for(j=i;j<L.len-1;j++) L.data[j]=L.data[j+1];

L.len--;

return 1;

} //按值插入,不改变原表递增性 int insert(Seqlist &L,elemtype x) { int i;

if (L.len==maxsize ) { cout<<"表已满,无法插入!";

return 0;

} for(i=L.len-1;i>=0&&

L.data[i]>x ;i--)//为 x 找到不改变原表递增的位置 L.data[i+1]=L.data[i];//后移 L.data[i+1]=x;//装入 x L.len++;

return 1;

} void print(Seqlist L) { int i,m=1;

for(i=0;i<L.len;i++) if (m==1) { cout<<'('<<L.data[i];

m++;

} else cout<<','<<L.data[i];

cout<<')'<<endl;

} void main() { int i;elemtype e;

Seqlist L;

elemtype x;

creat(L);

cout<<"删除前:"<<endl;

print(L);

cout<<"请输入待删除元素的序号:";

cin>>i; 3 《数据结构》实验 班级: 学号: 姓名: if ( listdelete(L,i,e) ) { cout<<"删除后"<<endl;

print(L);

} cout<<"插入前:"<<endl;

print(L);

cout<<"请输入待插入元素:";

cin>>x;

if ( insert(L,x) ) { cout<<"插入后"<<endl;

print(L);

} } 2.以单链表作为储存结构,实现有序表的合并。

typedef int elemtype;

typedef struct node { elemtype data;

struct node * next;

}*linklist;

#include<iostream.h>

int main() { void create_list(linklist &L);

void print_list(linklist L);

void merge_L(linklist A,linklist B,linklist &C);

linklist A,C,B;

cout<<"Start to build the list of A:\n";

create_list(A);

cout<<"The list of A has been built!\nPlease check carefully:\n";

print_list(A);

cout<<"If you has checked,starting to build the list of B:\n";

create_list(B);

cout<<"The list of B has been built!\nPlease check caerfully:\n";

print_list(B);

merge_L(A,B,C);

cout<<"The two lists has been merged as follows:\n";

print_list(C);

return 0;

} void create_list(linklist &L)//建表 { node * last,* u; 4 《数据结构》实验 班级: 学号: 姓名: elemtype x;

L=new node;

last=L;

cout<<"Please input the data(end with 0):\n";

cin>>x;

while(x) { u=new node;

u->data=x;

last->next=u;

last=u;

cin>>x;

} last->next=NULL;

} void print_list(linklist L) { linklist p;elemtype i=1;

p=L;

cout<<'(';

while(p->next!=NULL) { cout<<','<<p->next->data;

p=p->next;

} cout<<')';

} void merge_L(linklist A,linklist B,linklist &C) { linklist pa,pb,pc;

C =pc=A;

pa=A->next;

pb=B->next;

while(pa&&pb) {if(pa->data<=pb->data) { pc->next=pa;

pc=pa;

pa=pa->next;

} else {pc->next=pb;

pc=pb;

pb=pb->next;

}} if(pa) pc->next=pa;

else pc->next=pb;

//或 pc_>next=pa?pa:pb; delete B;

} 5 《数据结构》实验 班级: 学号: 姓名: 3. 利用栈(以顺序栈作存储结构)实现进制转换,并用队列(以链队列作存储结构)计算并 打印杨辉三角。

//十进制到八进制 #define maxsize 100 typedef int elemtype;

typedef struct {elemtype data[maxsize];

int top;

}Seqstack;

Seqstack S;

#include<iostream.h>

void init_stack(Seqstack &S)// { S.top= -1 ;

} int { gettop_stack(Seqstack S, elemtype &x)// if (S.top==-1 ) { cout<<"栈为空";

return 0;} x=S.data[S.top];

return 1; } int { pop_stack(Seqstack &S, elemtype &x)//&x 不能少&,改变 x if (S.top==-1 ) { cout<<"栈为空";

return 0;

} x=S.data[S.top--];

return 1; } int push_stack(Seqstack &S,elemtype &x)//&x 能少&,不改变 x { if (S.top==maxsize-1) { cout<<"溢出! ";

return 0;

} S.data[++S.top]=x;

return 1;

} int stack_empty(Seqstack S) 6 《数据结构》实验 班级: 学号: 姓名: {if(S.top==-1) return 1;

else return 0;

} void main() {int mod,n;elemtype x;

init_stack(S);

cout<<"输入要转换的数:";

cin>>n;

while(n) {mod=n%8;

push_stack(S,mod);

n=n/8;

} while(!stack_empty(S)) {pop_stack(S,x);

cout<<x;

} cout<<endl;

} 杨辉三角(队列) #include <stdio.h>

#include <malloc.h>

#define OK 1 #define ERROR 0 typedef int status;

typedef int elemtype;

typedef struct qnode { elemtype date;

struct qnode *next;

}*qptr;

typedef struct { qptr head;

qptr rear;

}linkq;

void initqueue(linkq &s) 7 《数据结构》实验 班级: 学号: 姓名: {// 初始化队列 s.head=(qptr)malloc(sizeof(qnode));

if(!s.head) printf("空间分配失败");

s.head->next=NULL;

s.rear=s.head;

s.rear=NULL;

} void insert(linkq &s,elemtype e) {//向对中插入元素 qptr newbase;

newbase=(qptr)malloc(sizeof(qnode));

newbase->date=e;newbase->next=NULL;

if(s.rear==NULL)//若原始队列为空 { s.rear=newbase;

s.head=s.rear;

s.rear->next=NULL;

} else//若原始队列非空 { s.rear->next=newbase;

s.rear=s.rear->next;

s.rear->next=NULL;

} } void output(linkq s) {//输出队列中元素 qptr p,q;

if(s.head==NULL) printf("队列为空\n");

else { if(s.head==s.rear) printf("

%d ",s.rear->date);

else { p=s.head;

do { printf("

%d ",p->date);

q=p;

p=p->next;

}while(q!=s.rear);

} 8 《数据结构》实验 班级: 学号: 姓名: } printf("\n");

} elemtype dequeue(linkq &s,elemtype &headelem) {//队首出队列,并用 e 返回队首值 qptr p;

headelem=s.head->date;

p=s.head;

s.head=p->next;

free(p);

return headelem;

} void yhsj(linkq &s,int N) {//输出 N 行杨辉三角 int i,m;

qptr p,q,h,r;

elemtype e,a;

if(N==1) output(s);

if(N>1) { for(m=1;m<=N;m++)//打印空格 printf("

");

output(s);

insert(s,1);

p=s.head;q=p->next;

for(i=1;i<=N;i++) { r=s.rear;

for(m=1;m<=N-i;m++)//打印空格 printf("

");

output(s);

while(p!=r) { e=p->date+q->date;

insert(s,e);

p=q;

q=q->next;

dequeue(s,a);

} e=p->date;

insert(s,e);

} } 9 《数据结构》实验 班级: 学号: 姓名: } void main() { int flag=1,N;

elemtype e,headelem;

linkq s;

initqueue(s);

insert(s,1);

printf("请输入要输出的杨辉三角的行数 N=");

scanf("%d",&N);

yhsj(s,N); } 实验结果(截图) 。

1. 以顺序表作储存结构,实现线性表的插入、删除。 2.以单链表作为储存结构,实现有序表的合并。 10 《数据结构》实验 班级: 学号: 姓名: 3.利用栈(以顺序栈作存储结构)实现进制转换,并用队列(以链队列作存储结构)计算并 打印杨辉三角。 进制转换(顺序栈) 杨辉三角(顺序栈) 五、实验总结(实验过程中出现的问题、解决方法、结果或其它) 由于 C 的基础不怎么好,所以数据结构的部分有些弄不清,例如循环体该如何写,还有 就是对数据结构中和 C 不一样的地方不适应,像是 cin,cout 就没办法更好的使用,还有 就是碰到一个题目不知道如何下手, 大部分都是通过老师给的借鉴程序和百度上的程序, 才能了解到如何去下手,所以现在我只能多看多写,通过了解别人的程序让自己了解更 多的程序类型。 11

《数据结构》课程设计报告 数据结构》 系 班 别: 计算机信息与技术系 _ 级:__ _ B080604_ _ __ 学 号:______B080605_______ 实训日期:20102010实训日期:2010-08-23 ...

自己写

(一)实验目的和要求 实验目的:熟练掌握线性表的基本操作在顺序存储结构上的实现。 实验要求:任选一种高级程序语言编写源程序,并调试通过,测试正确。 (二)...

数据结构实验报告三,数据结构实验报告总结,数据结构实验报告模板,《数据结构》实验报告》出自:QQ空间素材网
链接地址:http://www.qzoneai.com/sucai/xSiEXYgP7qEv6fJJ.html

相关文章阅读

网站地图 | 关于我们 | 联系我们 | 广告服务 | 免责声明 | 在线留言 | 友情链接 | RSS 订阅 | 热门搜索
版权所有 QQ空间素材网 www.qzoneai.com

数据结构实验报告三,数据结构实验报告总结,数据结构实验报告模板,《数据结构》实验报告