数据结构指导书第三版.docx

上传人:b****5 文档编号:29760608 上传时间:2023-07-26 格式:DOCX 页数:41 大小:27.33KB
下载 相关 举报
数据结构指导书第三版.docx_第1页
第1页 / 共41页
数据结构指导书第三版.docx_第2页
第2页 / 共41页
数据结构指导书第三版.docx_第3页
第3页 / 共41页
数据结构指导书第三版.docx_第4页
第4页 / 共41页
数据结构指导书第三版.docx_第5页
第5页 / 共41页
点击查看更多>>
下载资源
资源描述

数据结构指导书第三版.docx

《数据结构指导书第三版.docx》由会员分享,可在线阅读,更多相关《数据结构指导书第三版.docx(41页珍藏版)》请在冰豆网上搜索。

数据结构指导书第三版.docx

数据结构指导书第三版

实验一

实验名称

线性表的顺序存储

实验日期

实验目的

1.掌握线性表的顺序存储结构。

2.能熟练利用顺序存储结构实现线性表的基本操作。

3.能熟练掌握线性表创建、插入、删除、查找和显示线性表中元素等基本操作。

实验内容

1.建立含有不少于3个元素的顺序表,并将结果在屏幕上输出。

2.对刚建立的顺序表实现插入、删除、查找,并将结果在屏幕上输出。

3.设计一个选择式菜单。

算法描述:

#include"stdio.h"

#include"malloc.h"

#defineMAXSIZE200//线性表允许的最大长度

#definedatatypeint

typedefstruct//定义线性表的结构

{datatypedata[MAXSIZE];//表示线性表(a1,a2,….,an)

intlast;//last表示线性表的实际长度

}SeqList;

/*线性表初始化:

Init_List(L)

初始条件:

表L不存在

操作结果:

构造一个空的线性表*/

SeqList*init_SeqList()

{SeqList*L;

L=newSeqList;//L=malloc(sizeof(SeqList));

L->last=-1;

returnL;

}

/*插入操作:

Insert_List(L,i,x)

初始条件:

线性表L存在,插入位置正确(1<=i<=n+1,n为插入前的表长)。

操作结果:

在线性表L的第i个位置上插入一个值为x的新元素,这样使原序号为i,i+1,...,n的数据元素的序号变为i+1,i+2,...,n+1,插入后表长=原表长+1。

*/

intInsert_SeqList(SeqList*L,inti,datatypex)

{

 

}

/*删除操作:

Delete_List(L,i)

初始条件:

线性表L存在,1<=i<=n。

操作结果:

在线性表L中删除序号为i的数据元素,删除后使序号为i+1,i+2,...,n的元素变为序号为i,i+1,...,n-1,删除后新表长=原表长-1。

*/

intDelete_SeqList(SeqList*L,inti)

{

 

}

/*按值查找:

Locate_List(L,x),x是给定的一个数据元素。

初始条件:

线性表L存在

操作结果:

在表L中查找值为x的数据元素,其结果返回在L中首次出现的值为x的那个元素的序号或地址,称为查找成功;否则,在L中未找到值为x的数据元素,返回一特殊值表示查找失败。

*/

intLocation_SeqList(SeqList*L,datatypex)

{

 

}

voidprint(SeqList*L)//打印线性表   

{inti;

for(i=0;i<=L->last;i++)

printf("%d,",L->data[i]);

printf("\n");

}

voidmain()

{SeqList*L;

inti,j,k;

datatypex;

do

{printf("\n\n\n\n");

printf("\t\t\t线性表子系统\n");

printf("\t\t*******************************\n");

printf("\t\t*1----初始化表   *\n");

printf("\t\t*2----插入    *\n");

printf("\t\t*3----删  除    *\n");

printf("\t\t*4----查  找    *\n");

printf("\t\t*5----显  示    *\n");

printf("\t\t*0----返  回    *\n");

printf("\t\t*******************************\n");

printf("\t\t请选择菜单项(0-5):

");

scanf("%d",&k);getchar();

switch(k)

{

case1:

L=init_SeqList();//初始化线性表

break;

case2:

//在线性表第i位置处插入值为X的元素

printf("\n请输入插入的位置i和数据X(输入格式:

i,X):

");

scanf("%d,%d",&i,&x);

j=Insert_SeqList(L,i,x);

break;

case3:

//删除线性表中值为X的元素

printf("\n请输入要删除元素的位置i:

");

scanf("%d",&i);

j=Delete_SeqList(L,i);

if(j==1)printf("删除成功!

!

");

elseprintf("删除失败!

!

");

break;

case4:

//查找线性表中元素值为x的位置

printf("\n请输入要查找的数值X:

");

scanf("%d",&x);

j=Location_SeqList(L,x);

if(j!

=-1)

{print(L);printf("中值为X所在的位置是%d",j);}

else

printf("线性表中无此元素!

!

\n");

break;

case5:

//输出线性表

printf("\n线性表的顺序存储为:

");

print(L);

}

}while(k!

=0);

}

 

 

 

实验人员

实验地点

教师

评语

 

及格

不及格

批改日期

实验二

实验名称

线性表的链式存储

实验日期

实验目的

1.掌握线性表的链式存储结构。

2.能熟练利用链式存储结构实现线性表的基本操作。

3.能熟练掌握链式存储结构中算法的实现。

实验内容

1.用头插法或尾插法建立带头结点的单链表,并在屏幕上输出显示此链表。

2.实现单链表上的插入、删除、修改、查找、计数等操作,并将结果在屏幕上输出。

3.设计一个选择式菜单。

算法描述:

#include"stdio.h"

#include"malloc.h"

#definedatatypeint

typedefstructnode

{datatypedata;//链表的数据域

structnode*next;//链表的指针域

}LNode,*LinkList;

LinkListCreat_LinkList1()//头插入法建立单链表算法

{

 

}

/*按序号查找Get_Linklist(L,i)

在单链表L中查找第i个元素结点,找到返回其指针,否则返回空*/

LNode*Get_LinkList(LinkListL,inti)

{

 

}

/*插入运算Insert_LinkList(L,i,x)

在单链表L的第i个位置上插入值为x的元素*/

intInsert_LinkList(LinkListL,inti,datatypex)

{

 

}

/*删除运算:

Del_LinkList(L,i)

删除单链表L上的第i个数据结点*/

intDel_LinkList(LinkListL,inti)

{

 

}

voidprint(LinkListL)//输出单链表

{LNode*p=L;

while(p->next!

=NULL)

{printf("%d->",p->data);//输出表中非最后一个元素

p=p->next;

}

printf("%d\n",p->data);//输出表中最后一个元素

}

voidmain()

{

LinkListH;

inti,j,k;

datatypex;

do

{

printf("\n\n\n\n");

printf("\t\t\t链表子系统\n");

printf("\t\t*******************************\n");

printf("\t\t*1----建表   *\n");

printf("\t\t*2----插入    *\n");

printf("\t\t*3----删  除    *\n");

printf("\t\t*4----查  找    *\n");

printf("\t\t*5----显  示    *\n");

printf("\t\t*0----返  回    *\n");

printf("\t\t*******************************\n");

printf("\t\t请选择菜单项(0-5):

");

scanf("%d",&k);getchar();

if(k==1)

H=Creat_LinkList1();//用头插入法建立单链表

elseif(k==2)//在线性表第i位置处插入值为X的元素

{

printf("\n请输入插入的位置i和数据X(输入格式:

i,X):

");

scanf("%d,%d",&i,&x);

j=Insert_LinkList(H,i,x);

}

elseif(k==3)

{printf("\n请输入要删除元素的位置i:

");

scanf("%d",&i);

j=Del_LinkList(H,i);

if(j==1)printf("删除成功!

!

");

elseprintf("删除失败!

!

");

}

elseif(k==4)//查找线性表中元素值为x的位置

{printf("\n请输入要查找的序号i:

");

scanf("%d",&i);

LNode*p;

p=Get_LinkList(H,i);

if(p!

=NULL)

{print(H);printf("中序号为i的地址是%d",p);}

else

printf("链表中无此序号!

!

\n");

}

elseif(k==5)//输出链表

{printf("\n表的存储顺序为:

");

print(H);

}

}while(k!

=0);

}

 

 

 

 

实验人员

实验地点

教师

评语

 

及格

不及格

批改日期

实验三

实验名称

栈的应用

实验日期

实验目的

1.掌握栈的数据类型描述及栈的特点。

2.掌握栈的顺序和链式两种存储结构的特点及算法描述。

3.掌握栈的5种基本运算及算法在两种不同存储结构上的实现。

实验内容

1.编写链式栈进栈、出栈、显示栈中全部元素的程序。

2.将一个正整数n转换成R进制,要求用顺序栈的来实现。

3.用switch语句设计一个选择式菜单,以菜单方式执行上述操作。

算法描述:

#include"stdio.h"

#include"malloc.h"

typedefintdatatype;

typedefstructnode//定义链式栈结构

{datatypedata;

structnode*next;

}StackNode,*LinkStack;

//置空栈

LinkStackInit_LinkStack()

{

 

}

//入栈

LinkStackPush_LinkStack(LinkStacktop,datatypex)

{

 

}

//出栈

LinkStackPop_LinkStack(LinkStacktop,datatype*x)

{

 

}

voidprint(LinkStacktop)

{StackNode*p=top;

while(p!

=NULL)

{

printf("%d->",p->data);

p=p->next;

}

}

//顺序栈

#defineMAXSIZE1024

typedefstruct

{datatypedata[MAXSIZE];

inttop;

}SeqStack;

//顺序栈置空栈:

首先建立栈空间,然后初始化栈顶指针。

SeqStack*Init_SeqStack()

{SeqStack*s;

s=newSeqStack;

s->top=-1;

returns;

}

//顺序栈判空栈

intEmpty_SeqStack(SeqStack*s)

{if(s->top==-1)return1;

elsereturn0;

}

//顺序栈入栈

intPush_SeqStack(SeqStack*s,datatypex)

{if(s->top==MAXSIZE-1)return0;//栈满不能入栈

else{s->top++;

s->data[s->top]=x;

return1;

}

}

//顺序栈出栈

intPop_SeqStack(SeqStack*s,datatype*x)

{

if(Empty_SeqStack(s))return0;//栈空不能出栈

else{*x=s->data[s->top];

s->top--;return1;//栈顶元素存入*x,返回

}

}

voidconversion(intN,intr)

{SeqStack*s;

datatypex;

s=Init_SeqStack();//初始化栈

printf("\n%d的十进制数转换成%d进制为:

",N,r);

while(N)

{Push_SeqStack(s,N%r);//余数入栈

N=N/r;//商作为被除数继续

}

while(!

Empty_SeqStack(s))

{Pop_SeqStack(s,&x);

printf("%d",x);

}

}

voidmain()

{LinkStacktop;

top=Init_LinkStack();

inti,j,k;

datatypex;

do

{

printf("\n\n\n\n");

printf("\t\t\t栈的应用子系统\n");

printf("\t\t*******************************\n");

printf("\t\t*1----链式进栈   *\n");

printf("\t\t*2----链式出栈    *\n");

printf("\t\t*3----链栈显示    *\n");

printf("\t\t*4----进制转换    *\n");

printf("\t\t*0----返  回    *\n");

printf("\t\t*******************************\n");

printf("\t\t请选择菜单项(0-4):

");

scanf("%d",&k);getchar();

switch(k)

{

case1:

//进栈

printf("\n请输入要进栈的数据X:

");

scanf("%d",&x);

case2:

//出栈

case3:

//打印链式栈中的元素

printf("\n链式栈的元素有:

");

case4:

//进制转换

intN,r;

printf("\n请输入一个整数N=");

printf("\n请输入一个要转换的进制数r=");

}

}

}

 

 

 

 

实验人员

实验地点

教师

评语

 

及格

不及格

批改日期

实验四

实验名称

队列的应用

实验日期

实验目的

1.掌握队列的数据类型描述及队列的特点。

2.掌握队列的顺序和链式两种存储结构的特点及算法描述。

3.掌握队列的5种基本运算及算法在两种不同存储结构上的实现。

实验内容

1.实现顺序循环或链式队列的进队列、出队列、判断队列空否、显示队列中全部元素的运算。

2.设计一个选择式菜单,以菜单方式选择队列的各种操作。

算法描述:

#include"stdio.h"

#include"malloc.h"

typedefintdatatype;

#defineMAXSIZE50//队列的最大容量

//定义队列的结构体

typedefstruct

{

 

};

//置空队

 

//入队

 

//出队

 

//判队空

 

//显示队列

 

voidmain()

{

c_SeQueue*sq;

LQueue*Lq;

intj,k;

datatypex;

sq=Init_SeQueue();

Lq=Init_LQueue();

do

{

printf("\n\n\n\n");

printf("\t\t\t队列子系统\n");

printf("\t\t*******************************\n");

printf("\t\t*1----进队列   *\n");

printf("\t\t*2----出队列    *\n");

printf("\t\t*3----队列空否    *\n");

printf("\t\t*4----显示队列    *\n");

printf("\t\t*0----返  回    *\n");

printf("\t\t*******************************\n");

printf("\t\t请选择菜单项(0-4):

");

scanf("%d",&k);getchar();

switch(k)

{

case1:

//进队列

printf("\n请输入要进队列的数据:

");

;

;

break;

case2:

//出队列

;

break;

case3:

//判断队列空否

;

if(j==1)printf("此队列为空!

!

!

");

elseprintf("此队列不空。

");

break;

case4:

//显示队列

printf("\n此队列有数据:

");

;

}

}while(k!

=0);

}

运行结果

 

实验人员

实验地点

教师

评语

及格

不及格

批改日期

实验五

实验名称

二叉树的遍历和应用

实验日期

实验目的

1.掌握二叉树的数据类型描述及二叉树的特性。

2.掌握二叉树的链式存储结构的建立算法。

3.掌握二叉链表上二叉树的基本运算的实现。

实验内容

1.用递归或非递归的方法建立一棵二叉树。

2.用递归实现二叉树的先序、中序、后序三种遍历。

3.求二叉树的深度、叶子结点的个数。

4.设计一个选择式菜单,以菜单方式实现各种操作。

算法描述:

#include"stdio.h"

#include"malloc.h"

typedefcharTelernType;

typedefstructBTreeNode

{

TelernTypedata;//树的数据域为字符型

structBTreeNode*LChild;//*左孩子指针

structBTreeNode*RChild;//*右孩子指针

}BTree;

BTree*CreatBTree()

{

BTree*T;

charx;

scanf("%c",&x);getchar();

if(x=='0')T=NULL;

else

{T=newBTree;

T->data=x;

printf("请输入%c结点的左孩子:

",T->data);

T->LChild=CreatBTree();

printf("请输入%c结点的右孩子:

",T->data);

T->RChild=CreatBTree();

}

returnT;

}

//前序递归遍历二叉树

voidPreOrder(BTree*T)

{

 

}

voidInOrder(BTree*T)

{

 

}

voidpostOrder(BTree*T)

{

 

}

intTreeHeight(BTree*T)

{

intlh,rh;

if(T==NULL)return0;

else

{

lh=TreeHeight(T->LChild);

rh=TreeHeight(T->RChild);

if(lh>rh)returnlh+1;

elsereturnrh+1;

}

}

intcount=0;

voidleafnum(BTree*T)

{

if(T)//树不空

{if(T->LChild==NULL&&T->RChild==NULL)

count++;

leafnum(T->LChild);

leafnum(T->RChild);

}

}

voidmain()

{

BTree*T;

intk;

do

{

printf("\n\n\n\n");

printf("\t\t\t树子系统\n");

printf("\t\t******************************\n");

printf("\t\t*1----建二叉树   *\n"

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1