川师 数学院 数据结构试验报告资料
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
qu.rear =(qu.rear+1)%QueueSize;
qu.data[qu.rear]=x;
return 1;
}
status DeQueue(SqQueue &qu,char &x)
{
if(qu.rear==qu.front )
return 0;
qu.front =(qu.front +1)%QueueSize;
for(i=0;i<size;i++)
{
printf("pArray[%d]= ",i);
scanf("%d",&pArray[i]);
}
return *pArray;
}
int Compare()
{
int x,y,i;
x=y=p[0];
for(i=0;i<size;i++)
{
if(x>=p[i]) x=p[i];
printf("修改后的线性表数据为:\n");
//Delelem(L,4);
Displist(L);
}while(Select!=0);
return 0;
}
//运行结果:
实验三栈和队列实验(6学时)
实验目的:
(1)熟练掌握栈和队列的抽象数据类型及其结构特点;
(2)实现基本的栈和队列的基本操作算法程序。
四川师范大学数学与软件科学学院
实验报告
课程名称:数据结构(C语言版)
指导老师:冯山
实验项目
实验名称
学时
成绩
实验一
ADT的类C描述向C程序的转换实验
2学时
实验二
线性表及其基本操作实验
2学时
实验三
栈和队列实验
6学时
实验四
字符串实验
2学时
实验五
稀疏矩阵的三元组实现实验
4学时
实验六
二叉树的基本算法实验
4学时
实验步骤:
1.录入程序代码并进行调试和算法分析;2.编写实验报告。
实验结果:
(1)/*队列存储*/
#include "stdio.h"
typedef int status;
#define QueueSize 10
typedef struct sqqueue
{
char data[QueueSize];
实验准备:
1)计算机设备;2)程序调试环境的准备,如TC环境;3)实验内容的算法分析与代码设计与分析准备。
实验步骤:
1.安装TC并设置好环境,如果已安装好,可以跳过此步;
2.录入程序代码并进行调试和算法分析;
对实验内容(1)的操作步骤:1)用类C语言描述算法过程;2)用C语言环境实现该算法。
对实验内容(2)的操作步骤:1)完成算法的C实现;2)分析其时间复杂度和空间复杂度。
}
实验结果:
实验二线性表及其基本操作实验(2学时)
实验目的:
(1)熟练掌握线性表ADT和相关算法描述、基本程序实现结构;
(2)以线性表的基本操作为基础实现相应的程序;
(3)掌握线性表的顺序存储结构和动态存储结构之区分。
实验内容:(类C算法的程序实现,任选其一。具体要求参见教学实验大纲)
(1)一元多项式运算的C语言程序实现(加法必做,其它选做);
}
}
void CreatlistR(Sqlist &L,int a[],int n)//尾插法
{
//将新结点插到当前链表表尾,为此必须新增一个尾指针r,使其始终指向当前链表的尾结点
Sqlist s,r;
int i;
L=(Sqlist)malloc(sizeof(Sqlist));
L->next =NULL;
3.编写实验报告。
实验结果://动态分配数组空间
#include "stdio.h"
#include "malloc.h"
int size,i;
int *pArray;
int *p;
void malloc_size()
{
pArray=(int *)malloc(size*(sizeof(int)));
Sqlist s;
int i;
L=(Sqlist)malloc(sizeof(Sqlist));
L->next =NULL;
for(i=0;i<n;i++)
{
s=(Sqlist)malloc(sizeof(Sqlist));
s->data =a[i]; s->next =L->next ;
L->next =s;
if(y<=p[i]) y=p[i];
}
printf("min= %d\t max=%d\n",x,y);
return 0;
}
int Output_data()
{
p=pArray;
printf("before ofpaixu :\n");
for(i=0;i<size;i++)
{
printf("%d\t",*pArray);
{
x=p[i];p[i]=p[j];p[j]=x;
}
}
printf("%d\t",p[i]);
}
百度文库printf("\n");
}
void main()
{
clrscr();
input_size();
malloc_size();
input_data();
Output_data();
Compare();
paixu();
//2、将结点p的next域指向新结点s:p->next=s
int j=1;
Sqlist s,p=L->next ;
s=(Sqlist)malloc(sizeof(Sqlist));
s->data =x;s->next =NULL;
if(i<1||i>Getlength(L))
return 0;
while(j<i-1)
{
Sqlist L;
int Array[M],Select;
Initlialize(L);
do{
printf("请输入选择方法(1表示头插法,2表示尾插法,0表示结束):\n");
scanf("%d",&Select);
switch(Select)
{
case 1: printf("按头插法建立线性表:\n");input(Array,M); CreatlistF(L,Array,M);break;
x=qu.data[qu.front];
return 1;
}
status GetHead(SqQueue qu,char &x)
{
if(qu.rear ==qu.front)
return 0;
x=qu.data[(qu.front+1)%QueueSize];
return 1;
}
status QueueEmpty(SqQueue qu)
(2)学会用类C的语言对算法进行描述的方法,将类C算法转换成C源程序的方法和过程;
(3)抽象数据类型的定义和表示、实现;
(4)加深对数据的逻辑结构和物理结构之间关系的理解;
(5)初步建立起时间复杂度和空间复杂度的概念。
实验内容:(类C算法的程序实现)
(1)输入一组数据存入数组中,并将数据元素的个数动态地由输入函数完成。求输入数据的最大值、最小值,并通过函数参数返回所求结果;
pArray++;
}
printf("\n");
return *pArray;
}
void paixu()
{
int x=0;
int i,j;
printf("later of paixu:\n");
for(i=0;i<size;i++)
{
for(j=i+1;j<size;j++)
{
if(p[i]>=p[j])
{
int i=0;
Sqlist p=L->next ;
while(p!=NULL)
{
i++; p=p->next;
}
return i;
}
int Getelem(Sqlist L,int i)
{
int j=1,e;
Sqlist p=L->next;
while(j<i)
{
p=p->next ; j++;
r=L;
for(i=0;i<n;i++)
{
s=(Sqlist)malloc(sizeof(Sqlist));
s->data =a[i]; s->next=NULL;
r->next =s ; r =s;
}
}
int Inselem(Sqlist &L,int i,int x)
{
//1、将所建新结点s的next域指向p的下一结点:s->next=p->next
int front,rear;
}SqQueue;
void InitQueue(SqQueue &qu)
{
qu.front =qu.rear =0;
}
status EnQueue(SqQueue &qu,char x)
{
if((qu.rear +1)%QueueSize==qu.front)
return 0;
p=p->next ;
}
printf(“\n”);
}
void input(int *pArray,int n)
{
printf("请输入数组数据(共含%d个元):\n",n);
for(int i=0;i<n;i++)
Scanf(“%d”,&pArray[i]);
int main(int argc, char* argv[])
#define M 6
typedef struct node
{
int data;
struct node *next;
}*Sqlist;
void Initlialize(Sqlist &L)
{
L=(Sqlist)malloc(sizeof(Sqlist));
L->next =NULL;
}
int Getlength(Sqlist L)
{
p=p->next ;j++;
}
printf("在第%d个位置插入数据:%d\n",i,x);
s->next =p->next ; p->next =s;
return 1;
}
int Delelem(Sqlist &L,int i)
{
int j=1;
Sqlist p,q;
p=L;
if(i<1||i>Getlength(L))
实验七
Huffman树与Huffman树编码算法实验
4学时
实验八
图的建立与遍历算法实验
4学时
实验九
内部排序算法实验
4学时
实验十
查找实验
2学时
班级:2009级6班
学号:2009060630
姓名:
总成绩:________
实验一:ADT的类C描述向C程序的转换实验(2学时)
实验目的:
(1)复习C语言的基本用法;
}
int input_size()
{
printf("please input the size:\n");
printf("size= ");
scanf("%d",&size);
return 0;
}
int input_data()
{
printf("please input the value:\n");
(2)有序表的合并;
(3)集合的并、交、补运算;
实验准备:
1)计算机设备;2)程序调试环境的准备,如TC环境;3)实验内容的算法分析与代码设计与分析准备。
实验步骤:
1.录入程序代码并进行调试和算法分析;
2.编写实验报告。
实验结果:
//线性链表
#include "malloc.h"
#include "stdio.h"
实验内容:(类C算法的程序实现,任选其一)
(1)设计与实现基本的堆栈和队列结构下的各种操作(如堆栈的PUSH、POP等操作)(必做);
(2)以表达式计算为例,完成一个可以进行算术表达式计算功能的算法设计与实现(选做);
实验准备:
1)计算机设备;2)程序调试环境的准备,如TC环境;3)实验内容的算法分析与代码设计与分析准备。
}
e=p->data ;
printf("第%d个元素是:%d\n",i,e);
return 1;
}
int Locatelem(Sqlist L,int x)
{
int i=0;
Sqlist p=L->next ;
while(p!=NULL&&p->data !=x)
{
p=p->next ; i++;
}
if(p==NULL)
return 0;
else
{
printf("%d是第%d个元素\n",x,i);
return i;
}
}
void CreatlistF(Sqlist &L,int a[],int n)//头插法
{
//从一个空表开始,读取字符数组a中字符生成新结点,将读取数据存放到新结点数据域,
//再将新结点插入当前链表表头、直至结束
case 2: printf("按尾插法建立线性表:\n");input(Array,M);CreatlistR(L,Array,M);break;
}
printf("原线性表数据为:\n");Displist(L);
Getelem(L,3); Locatelem(L,2);
Inselem(L,5,5);
return 0;
while(j<i)
{
p=p->next ; j++;
}
q=p->next ;
p->next =q->next ;
free(q);
return 1;
}
void Displist(Sqlist L)
{
Sqlist p=L->next ;
while(p!=NULL)
{
printf("%d\t",p->data);
qu.data[qu.rear]=x;
return 1;
}
status DeQueue(SqQueue &qu,char &x)
{
if(qu.rear==qu.front )
return 0;
qu.front =(qu.front +1)%QueueSize;
for(i=0;i<size;i++)
{
printf("pArray[%d]= ",i);
scanf("%d",&pArray[i]);
}
return *pArray;
}
int Compare()
{
int x,y,i;
x=y=p[0];
for(i=0;i<size;i++)
{
if(x>=p[i]) x=p[i];
printf("修改后的线性表数据为:\n");
//Delelem(L,4);
Displist(L);
}while(Select!=0);
return 0;
}
//运行结果:
实验三栈和队列实验(6学时)
实验目的:
(1)熟练掌握栈和队列的抽象数据类型及其结构特点;
(2)实现基本的栈和队列的基本操作算法程序。
四川师范大学数学与软件科学学院
实验报告
课程名称:数据结构(C语言版)
指导老师:冯山
实验项目
实验名称
学时
成绩
实验一
ADT的类C描述向C程序的转换实验
2学时
实验二
线性表及其基本操作实验
2学时
实验三
栈和队列实验
6学时
实验四
字符串实验
2学时
实验五
稀疏矩阵的三元组实现实验
4学时
实验六
二叉树的基本算法实验
4学时
实验步骤:
1.录入程序代码并进行调试和算法分析;2.编写实验报告。
实验结果:
(1)/*队列存储*/
#include "stdio.h"
typedef int status;
#define QueueSize 10
typedef struct sqqueue
{
char data[QueueSize];
实验准备:
1)计算机设备;2)程序调试环境的准备,如TC环境;3)实验内容的算法分析与代码设计与分析准备。
实验步骤:
1.安装TC并设置好环境,如果已安装好,可以跳过此步;
2.录入程序代码并进行调试和算法分析;
对实验内容(1)的操作步骤:1)用类C语言描述算法过程;2)用C语言环境实现该算法。
对实验内容(2)的操作步骤:1)完成算法的C实现;2)分析其时间复杂度和空间复杂度。
}
实验结果:
实验二线性表及其基本操作实验(2学时)
实验目的:
(1)熟练掌握线性表ADT和相关算法描述、基本程序实现结构;
(2)以线性表的基本操作为基础实现相应的程序;
(3)掌握线性表的顺序存储结构和动态存储结构之区分。
实验内容:(类C算法的程序实现,任选其一。具体要求参见教学实验大纲)
(1)一元多项式运算的C语言程序实现(加法必做,其它选做);
}
}
void CreatlistR(Sqlist &L,int a[],int n)//尾插法
{
//将新结点插到当前链表表尾,为此必须新增一个尾指针r,使其始终指向当前链表的尾结点
Sqlist s,r;
int i;
L=(Sqlist)malloc(sizeof(Sqlist));
L->next =NULL;
3.编写实验报告。
实验结果://动态分配数组空间
#include "stdio.h"
#include "malloc.h"
int size,i;
int *pArray;
int *p;
void malloc_size()
{
pArray=(int *)malloc(size*(sizeof(int)));
Sqlist s;
int i;
L=(Sqlist)malloc(sizeof(Sqlist));
L->next =NULL;
for(i=0;i<n;i++)
{
s=(Sqlist)malloc(sizeof(Sqlist));
s->data =a[i]; s->next =L->next ;
L->next =s;
if(y<=p[i]) y=p[i];
}
printf("min= %d\t max=%d\n",x,y);
return 0;
}
int Output_data()
{
p=pArray;
printf("before ofpaixu :\n");
for(i=0;i<size;i++)
{
printf("%d\t",*pArray);
{
x=p[i];p[i]=p[j];p[j]=x;
}
}
printf("%d\t",p[i]);
}
百度文库printf("\n");
}
void main()
{
clrscr();
input_size();
malloc_size();
input_data();
Output_data();
Compare();
paixu();
//2、将结点p的next域指向新结点s:p->next=s
int j=1;
Sqlist s,p=L->next ;
s=(Sqlist)malloc(sizeof(Sqlist));
s->data =x;s->next =NULL;
if(i<1||i>Getlength(L))
return 0;
while(j<i-1)
{
Sqlist L;
int Array[M],Select;
Initlialize(L);
do{
printf("请输入选择方法(1表示头插法,2表示尾插法,0表示结束):\n");
scanf("%d",&Select);
switch(Select)
{
case 1: printf("按头插法建立线性表:\n");input(Array,M); CreatlistF(L,Array,M);break;
x=qu.data[qu.front];
return 1;
}
status GetHead(SqQueue qu,char &x)
{
if(qu.rear ==qu.front)
return 0;
x=qu.data[(qu.front+1)%QueueSize];
return 1;
}
status QueueEmpty(SqQueue qu)
(2)学会用类C的语言对算法进行描述的方法,将类C算法转换成C源程序的方法和过程;
(3)抽象数据类型的定义和表示、实现;
(4)加深对数据的逻辑结构和物理结构之间关系的理解;
(5)初步建立起时间复杂度和空间复杂度的概念。
实验内容:(类C算法的程序实现)
(1)输入一组数据存入数组中,并将数据元素的个数动态地由输入函数完成。求输入数据的最大值、最小值,并通过函数参数返回所求结果;
pArray++;
}
printf("\n");
return *pArray;
}
void paixu()
{
int x=0;
int i,j;
printf("later of paixu:\n");
for(i=0;i<size;i++)
{
for(j=i+1;j<size;j++)
{
if(p[i]>=p[j])
{
int i=0;
Sqlist p=L->next ;
while(p!=NULL)
{
i++; p=p->next;
}
return i;
}
int Getelem(Sqlist L,int i)
{
int j=1,e;
Sqlist p=L->next;
while(j<i)
{
p=p->next ; j++;
r=L;
for(i=0;i<n;i++)
{
s=(Sqlist)malloc(sizeof(Sqlist));
s->data =a[i]; s->next=NULL;
r->next =s ; r =s;
}
}
int Inselem(Sqlist &L,int i,int x)
{
//1、将所建新结点s的next域指向p的下一结点:s->next=p->next
int front,rear;
}SqQueue;
void InitQueue(SqQueue &qu)
{
qu.front =qu.rear =0;
}
status EnQueue(SqQueue &qu,char x)
{
if((qu.rear +1)%QueueSize==qu.front)
return 0;
p=p->next ;
}
printf(“\n”);
}
void input(int *pArray,int n)
{
printf("请输入数组数据(共含%d个元):\n",n);
for(int i=0;i<n;i++)
Scanf(“%d”,&pArray[i]);
int main(int argc, char* argv[])
#define M 6
typedef struct node
{
int data;
struct node *next;
}*Sqlist;
void Initlialize(Sqlist &L)
{
L=(Sqlist)malloc(sizeof(Sqlist));
L->next =NULL;
}
int Getlength(Sqlist L)
{
p=p->next ;j++;
}
printf("在第%d个位置插入数据:%d\n",i,x);
s->next =p->next ; p->next =s;
return 1;
}
int Delelem(Sqlist &L,int i)
{
int j=1;
Sqlist p,q;
p=L;
if(i<1||i>Getlength(L))
实验七
Huffman树与Huffman树编码算法实验
4学时
实验八
图的建立与遍历算法实验
4学时
实验九
内部排序算法实验
4学时
实验十
查找实验
2学时
班级:2009级6班
学号:2009060630
姓名:
总成绩:________
实验一:ADT的类C描述向C程序的转换实验(2学时)
实验目的:
(1)复习C语言的基本用法;
}
int input_size()
{
printf("please input the size:\n");
printf("size= ");
scanf("%d",&size);
return 0;
}
int input_data()
{
printf("please input the value:\n");
(2)有序表的合并;
(3)集合的并、交、补运算;
实验准备:
1)计算机设备;2)程序调试环境的准备,如TC环境;3)实验内容的算法分析与代码设计与分析准备。
实验步骤:
1.录入程序代码并进行调试和算法分析;
2.编写实验报告。
实验结果:
//线性链表
#include "malloc.h"
#include "stdio.h"
实验内容:(类C算法的程序实现,任选其一)
(1)设计与实现基本的堆栈和队列结构下的各种操作(如堆栈的PUSH、POP等操作)(必做);
(2)以表达式计算为例,完成一个可以进行算术表达式计算功能的算法设计与实现(选做);
实验准备:
1)计算机设备;2)程序调试环境的准备,如TC环境;3)实验内容的算法分析与代码设计与分析准备。
}
e=p->data ;
printf("第%d个元素是:%d\n",i,e);
return 1;
}
int Locatelem(Sqlist L,int x)
{
int i=0;
Sqlist p=L->next ;
while(p!=NULL&&p->data !=x)
{
p=p->next ; i++;
}
if(p==NULL)
return 0;
else
{
printf("%d是第%d个元素\n",x,i);
return i;
}
}
void CreatlistF(Sqlist &L,int a[],int n)//头插法
{
//从一个空表开始,读取字符数组a中字符生成新结点,将读取数据存放到新结点数据域,
//再将新结点插入当前链表表头、直至结束
case 2: printf("按尾插法建立线性表:\n");input(Array,M);CreatlistR(L,Array,M);break;
}
printf("原线性表数据为:\n");Displist(L);
Getelem(L,3); Locatelem(L,2);
Inselem(L,5,5);
return 0;
while(j<i)
{
p=p->next ; j++;
}
q=p->next ;
p->next =q->next ;
free(q);
return 1;
}
void Displist(Sqlist L)
{
Sqlist p=L->next ;
while(p!=NULL)
{
printf("%d\t",p->data);