数据结构实验题目C语言Word文档格式.docx
- 文档编号:22407307
- 上传时间:2023-02-03
- 格式:DOCX
- 页数:37
- 大小:442.26KB
数据结构实验题目C语言Word文档格式.docx
《数据结构实验题目C语言Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构实验题目C语言Word文档格式.docx(37页珍藏版)》请在冰豆网上搜索。
for(i=n;
i>
0;
--i)
{
p=(SNode*)malloc(sizeof(SNode));
scanf("
%d"
&
p->
data);
p->
next=head->
next;
head->
next=p;
}
return1;
}
intmenu_select()
intsn;
for(;
;
)
sn);
if(sn<
1||sn>
6)
printf("
\n\t输入错误,请重新输入\n"
else
break;
returnsn;
intPush(LinkStack&
top,SElemTypee)
SNode*q;
q=(LinkStack)malloc(sizeof(SNode));
if(!
q)
printf("
溢出!
return(ERROR);
q->
data=e;
next=top->
top->
next=q;
return(OK);
intPop(LinkStack&
top,SElemType&
e)
top->
next)
{printf("
error!
return(ERROR);
e=top->
next->
data;
q=top->
next=q->
free(q);
voidmain()
{inte;
LinkStacktop;
1.初始化一个栈;
\n2.PUSH;
\n3.POP;
\n4.显示所有栈里的元素;
\n5.结束;
while
(1)
switch(menu_select())
{
case1:
if(CreatTwo(top,Stack_Size))printf("
Success!
break;
case2:
Push:
scanf("
e);
if(Push(top,e))printf("
case3:
if(Pop(top,e))printf("
%d\n"
e);
case4:
LinkStackp;
所有栈里的元素:
p=top;
while(p->
{p=p->
%7d"
p->
}
case5:
return;
}
运行结果:
#include<
stdlib.h>
#defineOVERFLOW-1
#defineMAXSIZE100
typedefstruct
int*elem;
//队列存储空间
intfront;
intrear;
}SqQueue;
//判断选择是否正确
//参数(传出)SqQueue&
Q,循环队列(空)
intInitQueue(SqQueue&
Q)
Q.elem=(int*)malloc(MAXSIZE*sizeof(int));
Q.elem)exit(OVERFLOW);
Q.front=Q.rear=-1;
for(inti=0;
i<
MAXSIZE;
i++)
Q.elem[i]=-1;
returnOK;
//返回Q的元素个数
intQueueLength(SqQueueQ)
return(Q.rear-Q.front+MAXSIZE)%MAXSIZE;
//显示队列的元素
voidDisplay(SqQueueQ)
=QueueLength(Q);
if(Q.elem[i]!
=-1)printf("
%d"
Q.elem[i]);
//入队
intEnQueue(SqQueue&
Q,inte)
Q.rear=(Q.rear+1)%MAXSIZE;
if(Q.rear==Q.front)returnERROR;
Q.elem[Q.rear]=e;
//出队
intDeQueue(SqQueue&
Q,int&
if(Q.front==Q.rear)returnERROR;
e=Q.elem[Q.front+1];
Q.elem[Q.front+1]=-1;
Q.front=(Q.front+1)%MAXSIZE;
SqQueueQ;
InitQueue(Q);
intelem,e;
请输入队列元素(以0结束):
scanf("
elem);
while(elem!
=0)
EnQueue(Q,elem);
队列为:
Display(Q);
1.初始化一个队列;
\n2.入队;
\n3.出队;
\n4.显示队列的所有元素;
\n5.队列长度:
\n6.结束;
{EnQueue(Q,elem);
Display(Q);
fflush(stdin);
EnQueue(Q,elem);
DeQueue(Q,elem);
\n队列的所有元素:
QueueLength(Q));
case6:
实验二、数组
数组一般不做插入或删除操作,也就是说,一旦建立了数组,则结构中的数据元素个数和元素之间的关系就不再发生变动。
本程序数组的大小定义为3*3,可以通过修改“#defineM”来变动。
本程序具有矩阵相加、矩阵A转置、矩阵B转置、矩阵相乘四个功能。
㈡、实验代码:
#defineM3
voidMatrixAdd(intm1[M][M],intm2[M][M],intresult[M][M])//两个矩阵m1和m2相加,结果放到result
inti,j;
for(i=0;
M;
for(j=0;
j<
j++)
result[i][j]=m1[i][j]+m2[i][j];
voidMatrixTrams(intm1[M][M],intresult[M][M])//矩阵转置
for(j=0;
result[i][j]=m1[j][i];
voidMatrixMultiply(intm1[M][M],intm2[M][M],intresult[M][M])
result[i][j]=0;
for(intk=0;
k<
k++)
result[i][j]+=m1[i][k]*m2[k][j];
voidDisplay(intresult[M][M])//显示矩阵
%-5d"
result[i][j]);
intA[M][M],B[M][M];
请输入第一个矩阵:
for(i=0;
A[i][j]);
请输入第二个矩阵:
for(i=0;
for(j=0;
scanf("
B[i][j]);
intresult[M][M];
/*printf("
\n矩阵A:
Display(A);
\n矩阵B:
Display(B);
*/
请选择:
\n1.矩阵相加:
\n2.矩阵A转置:
\n3.矩阵B转置:
\n4.矩阵相乘:
\n5.退出。
\n\n"
while
(1)
{intl;
l);
switch(l)
{
case1:
printf("
矩阵相加的运算结果:
MatrixAdd(A,B,result);
Display(result);
break;
case2:
矩阵A转置的运算结果:
MatrixTrams(A,result);
case3:
矩阵B转置的运算结果:
MatrixTrams(B,result);
case4:
矩阵相乘的运算结果:
MatrixMultiply(A,B,result);
case5:
退出。
return;
default:
输入错误!
"
实验结果:
实验三、查找
1、实验内容
掌握各种查找(顺序、二分法、查找树、哈希)方法及适用场合,并能在解决实际问题时灵活应用。
本实验采用二分查找。
二分查找又称折半查找,它是一种效率较高的查找方法。
折半查找法的优点是比较次数少,查找速度快,平均性能好;
其缺点是要求待查表为有序表,且插入删除困难。
因此,折半查找方法适用于不经常变动而查找频繁的有序列表。
本程序具有找出数据位置和显示查找次数两个功能。
#defineMAX100
intr[MAX],i,k,low,high,mid,m,n;
\n\n建立递增有序的查找顺序表(以-1结束):
MAX;
r[i]);
if(r[i]==-1)
n=i;
\n请输入要查找的数据:
k);
low=0;
high=n-1;
m=0;
while(low<
=high)
mid=(low+high)/2;
m++;
if(r[mid]>
k)
high=mid-1;
if(r[mid]<
low=mid+1;
else
if(low>
high)
没有找到\n"
共进行%d次比较。
m);
if(r[mid]<
mid++;
可将这个数插入到第%d个数的后面。
mid);
else
\n要找的数据=%d在第%d个数的位置上。
k,mid+1);
\n\n共进行了%d次比较。
实验四、树
1、实验内容:
进一步掌握树的结构及非线性特点,递归特点和动态性;
进一步巩固对指针的使用和二叉树的三种遍历方法、建立方法及用广义表进行输入输出。
本程序将第一个元素作为树根,其余元素若小于树根则为左子树,若大于树根则为右子树。
本程序具有求左子树、求右子树、求深度、先序遍历、中序遍历(递归算法)、中序遍历(非递归算法)、后序遍历六个功能。
//描述:
两个指针指向左右孩子,算法见教材
#defineMAX50
typedefstructbtnode
intData;
structbtnode*Llink;
structbtnode*Rlink;
}btnode,*btreetype;
btreetypeCreatTree(intn)//传入数据数量,返回根结点指针
btreetyperoot=NULL;
n;
btreetypenewNode,currentNode,parentNode;
newNode=(btreetype)malloc(sizeof(btnode));
newNode->
Data);
newNode->
Llink=NULL;
Rlink=NULL;
currentNode=root;
if(currentNode==NULL)root=newNode;
else{
while(currentNode!
=NULL)
parentNode=currentNode;
if(newNode->
Data<
currentNode->
Data)
currentNode=currentNode->
Llink;
else
Rlink;
if(newNode->
parentNode->
parentNode->
Llink=newNode;
Rlink=newNode;
returnroot;
voidOutputTree(btreetype&
root)
btreetypep;
p=root->
建立的二叉树的左子树为:
while(p!
%-8d"
p=p->
\n建立的二叉树的右子树为:
intdepth(btreetyperoot)
p=root;
intdep1;
intdep2;
if(root==NULL)return0;
dep1=depth(p->
Llink);
dep2=depth(p->
Rlink);
if(dep1>
dep2)return(dep1+1);
elsereturn(dep2+1);
voidPreOrder(btreetype&
root)//先序遍历(递归)
if(p!
PreOrder(p->
voidInOrder(btreetype&
root)//中序遍历(递归)
InOrder(p->
voidInOrder_Norecuision(btreetype&
btreetypestack[MAX];
inttop=0;
do
while(p!
top++;
stack[top]=p;
p=p->
if(top>
0)
p=stack[top];
top--;
}while(p!
=NULL||top!
=0);
voidPostOrder(btreetype&
PostOrder(p->
btreetypebtree;
intcount;
请输入元素个数:
count);
请输入数据:
btree=CreatTree(count);
OutputTree(btree);
\n建立的二叉树的深度为:
depth(btree));
\n先序遍历:
PreOrder(btree);
\n中序遍历(递归算法):
InOrder(btree);
\n中序遍历(非递归算法):
InOrder_Norecuision(btree);
\n后序遍历:
PostOrder(btree);
string.h>
#definemaxspace100
#definekeylen7
#defineradix_n10
#defineradix_c26
typedefcharkeytype;
typ
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构实验题目 C语言 数据结构 实验 题目 语言