数据结构实验说明书VCWord格式文档下载.docx
- 文档编号:20472333
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:38
- 大小:24.62KB
数据结构实验说明书VCWord格式文档下载.docx
《数据结构实验说明书VCWord格式文档下载.docx》由会员分享,可在线阅读,更多相关《数据结构实验说明书VCWord格式文档下载.docx(38页珍藏版)》请在冰豆网上搜索。
1||i>
L.length+1)returnERROR;
if(L.length>
=L.listsize)
{newbase=(ElemType*)realloc(L.elem,
(L.listsize+LISTINCREMENT)*sizeof(ElemType));
//if(!
newbase)exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
q=&
(L.elem[i-1]);
for(p=&
(L.elem[L.length-1]);
p>
=q;
--p)
*(p+1)=*p;
*q=e;
++L.length;
//---------顺序表的转置-----------------
Statusrev(Sqlist&
{inti;
ElemTypetemp;
for(i=0;
i<
L.length/2;
i++)
{temp=L.elem[i];
L.elem[i]=L.elem[L.length-1-i];
L.elem[L.length-1-i]=temp;
StatusOutput(SqlistL)
inti;
printf("
\n"
);
L.length;
printf("
%d"
L.elem[i]);
//--------主函数-----------
intmain()
//验证部分
inti,e;
SqlistL;
InitList(L);
for(i=1;
=10;
{scanf("
%d"
&
e);
ListInsert_Sq(L,i,e);
Output(L);
rev(L);
Output(L);
return0;
2.单链表的逆置算法.
#defineNULL0
typedefstructLNode
{ElemTypedata;
structLNode*next;
}LNode,*LinkList;
//-------建立单链表-----------------
LinkListCreateList_L(intn)
LinkListL,p;
L=(LinkList)malloc(sizeof(LNode));
L->
next=NULL;
for(i=n;
i>
0;
--i)
{p=(LinkList)malloc(sizeof(LNode));
scanf("
p->
data);
p->
next=L->
next;
next=p;
returnL;
//-------单链表的转置---------
Statusrev(LinkList&
{LinkListP,Q;
P=L->
if(L->
next&
&
P->
next)
{Q=P->
P->
while(Q)
{P=Q;
Q=Q->
next=P;
StatusOutput(LinkList&
{
LinkListp=L->
while(p)
{
p->
p=p->
//---------主函数----------
//验证部分
LinkListL;
L=CreateList_L(10);
实验二:
栈与队列
使学生深入了解栈与队列的特性,以便在实际背景下灵活运用他们,同时还将巩固这两种结构的构造方法。
1、检测表达式中{},[],()扩号匹配算法.
2、检测字符串是否回文的算法
string.h"
#defineSTACK_INIT_SIZE30
#defineSTACKINCREMENT10
typedefcharSElemType;
{SElemType*base;
SElemType*top;
intstacksize;
}SqStack;
//-----------初始化栈------------
StatusInitStack(SqStack&
S)
{S.base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!
S.base)returnERROR;
S.top=S.base;
S.stacksize=STACK_INIT_SIZE;
//--------------压栈----------------
StatusPush(SqStack&
S,SElemTypee)
{if(S.top-S.base>
=S.stacksize)
{S.base=(SElemType*)realloc(S.base,(S.stacksize+STACKINCREMENT)*sizeof(SElemType));
S->
base)exit(OVERFLOW);
S.top=S.base+S.stacksize;
S.stacksize+=STACKINCREMENT;
*S.top++=e;
//------------------出栈------------------
StatusPop(SqStack&
S,SElemType*e)
{if(S.top==S.base)returnERROR;
*e=*--S.top;
StatusStackEmpty(SqStackS)
{return(S.base==S.top);
//--------------取栈顶元素----------------
StatusGetTop(SqStackS,SElemType*e)
{if(StackEmpty(S))returnERROR;
*e=*(S.top-1);
//---------括号区配-----------------
intpair(char*s)
{inti;
chare;
SqStackT;
InitStack(T);
(int)strlen(s);
{if(s[i]=='
('
||s[i]=='
['
)Push(T,s[i]);
if(s[i]=='
)'
)
{if(!
GetTop(T,&
e))returnERROR;
elseif(e=='
)Pop(T,&
elsereturnERROR;
]'
elseif(e=='
return(StackEmpty(T));
//--------------回文-----------------------
intIshuiwen(char*s)
{SqStackT;
inti,l;
charc;
l=(int)strlen(s);
l/2;
Push(T,s[i]);
while(!
StackEmpty(T))
{Pop(T,&
c);
if(c!
=s[l-i])returnERROR;
i--;
//--------------主函数------------
chars[80],d;
gets(s);
/*
d=pair(s);
if(d)printf("
YES"
elseprintf("
NO"
*/
d=Ishuiwen(s);
实验三二叉树与树
实验目的:
掌握二叉树的性质,二叉树的遍历,二叉树的线索化及构造赫夫曼树。
二叉树上各种算法特别是递归算法的设计
1、用先序方法建立一棵二叉树.(二叉链表)算法.
2、先,中,后序遍历二叉树算法
算法参考答案:
//-------结构定义及宏定义------------
typedefstructBiTNode
{chardata;
structBiTNode*lchild,*rchild;
}BiTNode,*BiTree;
//-------建立二叉树---------------
BiTreeCreateBiTree()
{BiTreeT;
charch;
%c"
ch);
if(ch=='
#'
)T=NULL;
else{
T=(BiTNode*)malloc(sizeof(BiTNode));
T)exit(-2);
T->
data=ch;
lchild=CreateBiTree();
rchild=CreateBiTree();
return(T);
//------先序遍历--------------
voidPreOrder(BiTreeT)
{if(T)
{printf("
%c"
T->
PreOrder(T->
lchild);
rchild);
//------中序遍历--------------
voidInOrder(BiTreeT)
InOrder(T->
//------后序遍历--------------
voidLastOrder(BiTreeT)
LastOrder(T->
//-------主函数-------------
BiTreeT;
T=CreateBiTree();
\nPreorder:
"
PreOrder(T);
\ninorder:
InOrder(T);
\nLastorder:
LastOrder(T);
实验四图
掌握图的定义和术语,图的存储结构(数组表示法,邻接表,)及遍历方法。
1建立一个图(邻接表).
2实现对图的深度遍历算法.
(顶点编号从0开始)
#defineMaxVerNum100/*最大顶点数为*/
typedefenum{False,True}boolean;
stdlib.h"
booleanvisited[MaxVerNum];
typedefstructnode/*表结点*/
intadjvex;
/*邻接点域,一般是放顶点对应的序号或在表头向量中的下标*/
charInfo;
/*与边(或弧)相关的信息*/
structnode*next;
/*指向下一个邻接点的指针域*/
}EdgeNode;
typedefstructvnode/*顶点结点*/
charvertex;
/*顶点域*/
EdgeNode*firstedge;
/*边表头指针*/
}VertexNode;
VertexNodeadjlist[MaxVerNum];
/*邻接表*/
intn,e;
/*顶点数和边数*/
}ALGraph;
/*ALGraph是以邻接表方式存储的图类型*/
//建立一个无向图的邻接表存储的算法如下:
voidCreateALGraph(ALGraph*G)/*建立有向图的邻接表存储*/
inti,j,k;
//intN,E,i;
EdgeNode*p;
请输入顶点数和边数:
%d%d"
G->
n,&
n=%d,e=%d\n\n"
G->
n,G->
getchar();
n;
i++)/*建立有n个顶点的顶点表*/
请输入第%d个顶点字符信息(共%d个):
i+1,G->
n);
scanf("
(G->
adjlist[i].vertex));
/*读入顶点信息*/
getchar();
G->
adjlist[i].firstedge=NULL;
/*顶点的边表头指针设为空*/
for(k=0;
k<
2*G->
e;
k++)/*建立边表*/
请输入边<
Vi,Vj>
对应的顶点序号(共%d个):
2*G->
i,&
j);
/*读入边<
的顶点对应序号*/
p=(EdgeNode*)malloc(sizeof(EdgeNode));
//生成新边表结点p
p->
adjvex=j;
/*邻接点序号为j*/
next=G->
adjlist[i].firstedge;
/*将结点p插入到顶点Vi的链表头部*/
adjlist[i].firstedge=p;
}
\n图已成功创建!
对应的邻接表如下:
p=G->
%c->
adjlist[i].vertex);
while(p!
=NULL)
{
printf("
[%c]"
adjlist[p->
adjvex].vertex);
p=p->
}
}/*CreateALGraph*/
intFirstAdjVertex(ALGraph*g,intv)//找图g中与顶点v相邻的第一个顶点
if(g->
adjlist[v].firstedge!
=NULL)return(g->
adjlist[v].firstedge)->
adjvex;
elsereturn0;
intNextAdjVertex(ALGraph*g,intvi,intvj)//找图g中与vi相邻的,相对相邻顶点vj的下一个相邻顶点
p=g->
adjlist[vi].firstedge;
while(p!
=NULL&
adjvex!
=vj)p=p->
if(p!
next!
=NULL)returnp->
next->
voidDFS(ALGraph*G,intv)/*从第v个顶点出发深度优先遍历图G*/
intw;
%c"
adjlist[v].vertex);
visited[v]=True;
/*访问第v个顶点,并把访问标志置True*/
for(w=FirstAdjVertex(G,v);
w;
w=NextAdjVertex(G,v,w))
if(!
visited[w])DFS(G,w);
/*对v尚未访问的邻接顶点w递归调用DFS*/
voidDFStraverse(ALGraph*G)
/*深度优先遍历以邻接表表示的图G,而以邻接矩阵表示时,算法完全相同*/
{intv;
for(v=0;
v<
v++)
visited[v]=False;
/*标志向量初始化*/
//for(i=0;
visited[0])DFS(G,0);
}/*DFS*/
ALGraphG;
CreateALGraph(&
G);
该无向图的深度优先搜索序列为:
DFStraverse(&
\nSuccess!
附:
1.显示图的邻接矩阵,图的邻接表,深度优先遍历,广度优先遍历,最小生成树PRIM算法,最小生成树KRUSCAL算法,图的连通分量。
2.当用户选择的功能错误时,系统会输出相应的提示。
3.通过图操作的实现,把一些实际生活中的具体的事物抽象出来
#include<
iostream>
malloc.h>
usingnamespacestd;
#defineint_max10000
#defineinf9999
#definemax20
//…………………………………………邻接矩阵定义……………………
typedefstructArcCell
intadj;
char*info;
}ArcCell,AdjMatrix[20][20];
typedefstruct
charvexs[20];
AdjMatrixarcs;
intvexnum,arcnum;
}MGraph_L;
//^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
intlocalvex(MGraph_LG,charv)//返回V的位置
inti=0;
while(G.vexs[i]!
=v)
++i;
returni;
intcreatMGraph_L(MGraph_L&
G)//创建图用邻接矩阵表示
charv1,v2;
inti,j,w;
cout<
<
…………创建无向图…………"
endl<
请输入图G顶点和弧的个数:
(46)不包括“()”"
endl;
cin>
>
G.vexnum>
G.arcnum;
i!
=G.vexnum;
++i)
输入顶点"
G.vexs[i];
for(j=0;
j!
++j)
{
G.arcs[i][j].adj=int_max;
G.arcs[i][j].info=NULL;
for(intk=0;
k
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 实验 说明书 VC
![提示](https://static.bdocx.com/images/bang_tan.gif)