数据结构实验报告三,数据结构实验报告总结,数据结构实验报告模板,《数据结构》实验报告
发布时间: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
相关文章阅读
- 党员活动日工作总结,党员活动日 工作计划,社会实践活动日手抄报,综合实践活动日工作安排
- 被告变原告离婚可以吗,离婚案件被告起诉原告,两原告同时起诉一被告,原告赵娇娇诉被告李刚强离婚纠纷一案一审民事判决书
- 财产损害赔偿纠纷案,两原告同时起诉一被告,原告与第一被告串通,原告大口粮管所诉被告柳占旗恢复原状及财产损害赔偿纠纷一案
- 卫生检查通报,工作纪律检查情况通报,安全检查通报,检查通报10.16
- 危货运输企业安全检查,危房危窑安全检查重点,关于加强危爆物品管理,关于配置矿用人体安全检查仪加强危爆品有效管理的通知
- 向张伟同志学习心得,赴北师大学习心得体会,北师大学习心得体会,学习习进平同志在北师大讲话心得体会
- 物资收发卡片,物资收发存管理办法,物资收发台账表格,物资收发卡
- 怎么做好一个主持人,如何做好主持人,怎样做好主持人,如何做好一个主持人
- 入党积极分子转正程序,发展入党积极分子程序,入党积极分子程序,入党积极分子培训-明确入党条件和入党程序
- 郑州审车那里人最少,十一旅游人少的地方,国庆旅游人少的地方,人多的地方少去(过审)
- 供暖年度总结表彰大会,大学年度表彰大会总结,企业年度总结表彰大会,表彰大会暨年度总结
- 企业负责人安全责任制,安全生产责任制考核表,安全生产责任制范本,1、主要负责人安全生产责任制
- 无怨无悔爱一场,无怨无悔跟主走歌谱,生无怨死无悔,执着追求无怨无悔
- 个人征信查询授权书,企业征信授权书,征信授权书,征信授权书(1)