数据结构实验题目C语言Word文档格式.docx

上传人:b****7 文档编号:22407307 上传时间:2023-02-03 格式:DOCX 页数:37 大小:442.26KB
下载 相关 举报
数据结构实验题目C语言Word文档格式.docx_第1页
第1页 / 共37页
数据结构实验题目C语言Word文档格式.docx_第2页
第2页 / 共37页
数据结构实验题目C语言Word文档格式.docx_第3页
第3页 / 共37页
数据结构实验题目C语言Word文档格式.docx_第4页
第4页 / 共37页
数据结构实验题目C语言Word文档格式.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

数据结构实验题目C语言Word文档格式.docx

《数据结构实验题目C语言Word文档格式.docx》由会员分享,可在线阅读,更多相关《数据结构实验题目C语言Word文档格式.docx(37页珍藏版)》请在冰豆网上搜索。

数据结构实验题目C语言Word文档格式.docx

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

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

当前位置:首页 > 幼儿教育 > 幼儿读物

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

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