数据结构报告Word文档下载推荐.docx
- 文档编号:21154521
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:34
- 大小:241.02KB
数据结构报告Word文档下载推荐.docx
《数据结构报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数据结构报告Word文档下载推荐.docx(34页珍藏版)》请在冰豆网上搜索。
/*'
也可用其ASCII码97来表示*/
p->
link=(test*)malloc(m);
/*m=sizeof(test));
p=p->
link;
}
link=NULL;
}
voiddisplay()/*字母链表的输出*/
{p=head;
while(p->
link!
=NULL)
{printf("
%c"
p->
data);
printf("
%c\n"
intinsert_char(charX,charY)/*插入一个字母X在某个字母Y之前,若找不到Y字母则加到末尾*/
r=(test*)malloc(m);
r->
data=X;
if(head->
data==Y)
{head=r;
r->
link=p;
else{while((p->
data!
=Y)&
&
(p->
=NULL)){q=p;
p=p->
if(p->
data==Y){q->
link=r;
else{p->
L++;
return(0);
intdelet_char(charX)/*删除元素X,注意保存X的前趋元素指针!
{p=head;
data==X){head=head->
free(p);
=X)&
=NULL))
{q=p;
if(p->
data==X)
{q->
link=p->
free(p);
elsereturn(-1);
L--;
voidmain(void)/*字母线性表的生成和输出*/
{L=26;
build();
display();
insertreturnvalue=%d\n"
insert_char('
L'
'
W'
));
deletereturnvalue=%d\n"
delet_char('
z'
运行结果:
1.2创建一个链表:
程序代码如下:
#include"
conio.h"
stdio.h"
stdlib.h"
structlist
{
intdata;
structlist*next;
};
typedefstructlistnode;
typedefnode*link;
voidmain()
{
linkptr,head;
intnum,i;
ptr=(link)malloc(sizeof(node));
head=ptr;
printf("
pleaseinput5numbers:
\n"
);
for(i=0;
5;
scanf("
%d"
&
ptr->
ptr->
next=(link)malloc(sizeof(node));
if(i==4)
next=NULL;
elseptr=ptr->
next;
ptr=head;
while(ptr!
Thevalueis=%d\n"
ptr->
ptr=ptr->
getch();
运行结果为:
3、反向输出一个链表。
程序源代码:
/*reverseoutputalist*/
{intdata;
structlist*next;
};
typedefstructlistnode;
typedefnode*link;
{linkptr,head,tail;
intnum,i;
tail=(link)malloc(sizeof(node));
tail->
ptr=tail;
printf("
\npleaseinput5data==>
for(i=0;
=4;
{
scanf("
num);
ptr->
data=num;
head=(link)malloc(sizeof(node));
head->
next=ptr;
ptr=head;
}
ptr=ptr->
while(ptr!
Thevalueis==>
%d\n"
ptr=ptr->
}}
实验二
栈和队列的应用
[实验目的]:
掌握栈和队列的结构定义和特性;
掌握栈和队列的基本操作以及栈和队列在程序设计中的应用。
[实验题目]:
1.栈实现数制转换
#include<
typedefintStatus;
typedefintSElemType;
#defineOK1
#defineERROR0
#defineSTACK_INIT_SIZE100
#defineSTACKINCREMENT10
structSTACK
SElemType*base;
SElemType*top;
intstacksize;
typedefstructSTACKSqStack;
typedefstructSTACK*pSqStack;
StatusInitStack(SqStack**S)
(*S)=(SqStack*)malloc(sizeof(SqStack));
(*S)->
base=(SElemType*)malloc(STACK_INIT_SIZE*sizeof(SElemType));
if(!
(*S)->
base)
returnERROR;
top=(*S)->
base;
stacksize=STACK_INIT_SIZE;
returnOK;
StatusStackEmpty(SqStackS)
if(S.top==S.base)returnOK;
else
StatusPush(SqStack*S,SElemTypee)
if(S->
top-S->
base>
=S->
stacksize)
S->
base=(SElemType*)realloc(S->
base,
(S->
stacksize+STACKINCREMENT)*sizeof(SElemType));
S->
returnERROR;
top=S->
base+S->
stacksize;
stacksize+=STACKINCREMENT;
*(S->
top++)=e;
StatusPop(SqStack*S,SElemType*e)
top==S->
base)returnERROR;
*e=*(--(S->
top));
Statusvisit(SElemType*e)
%d"
*e);
voidconversion()
pSqStackS;
SElemTypee;
intn;
InitStack(&
S);
InputanumbertoconverttoOCT:
n);
if(n<
0)
\nThenumbermustbeover0."
return;
if(n==0)Push(S,0);
Push(S,n%8);
n=n/8;
theresultis:
"
while(!
StackEmpty(*S)){
Pop(S,&
e);
e);
\n\n\n\n"
conversion();
\n\nWelcometovisit!
"
实验三
串的应用
掌握串的数据类型定义,串的存储结构;
掌握串的基本操作的实现和应用。
3.1编写一个实现串的置换操作Replace(&
S,T,V)的算法。
代码如下:
#include<
string.h>
malloc.h>
intindex(char*s,char*t,intpos,intsl,inttl);
//从主串s的第pos个字符开始查找子串t,函数结果是子串t在主串s的pos开始之后首次出现的位置
voidreplace(char*s,char*t,char*v);
//串的置换,将主串s中的t串,置换为v串
main()
{
char*s,*t,*v;
s=(char*)malloc(100);
t=(char*)malloc(100);
v=(char*)malloc(100);
输入字符串s:
gets(s);
输入要在字符串s查找的子串t:
gets(t);
输入要置换的字符串v:
gets(v);
replace(s,t,v);
//调用串置换函数
输出替换后的新字符串:
%s\n"
s);
}
voidreplace(char*s,char*t,char*v)//串的置换,将主串s中的t串,置换为v串
inti,j,k=1,po,sl,tl,p;
sl=strlen(s);
tl=strlen(t);
po=1;
k=index(s,t,po,sl,tl);
if(k==0)
i=k-1;
if(strlen(v)==tl)//替换串的长度和子串的长度相等时
for(j=0;
j<
=tl-1;
j++)
s[i++]=v[j];
if(strlen(v)!
=tl)//替换串的长度和子串的长度不相等时,借助第三个数组t完成操作
{
k-1;
j++)//先复制子串前的字符
t[j]=s[j];
for(p=0;
p<
strlen(v);
p++)//再复制换的字符
t[j++]=v[p];
for(p=k+tl-1;
sl;
p++)//接着复制子串后的字符
t[j++]=s[p];
t[j]='
\0'
;
sl=strlen(t);
i++)//最后把数组t的值赋值给s
s[i]=t[i];
s[i]='
}
intindex(char*s,char*t,intpos,intsl,inttl)//从主串s的第pos个字符开始查找子串t,函数结果是子串t在主串s的pos开始之后首次出现的位置
inti,j;
i=pos;
j=1;
while(i<
=sl&
j<
=tl)
if(s[i-1]==t[j-1])
i++;
j++;
else
{i=i-j+2;
if(j>
tl)
return(i-tl);
//返回位置
return(0);
实验四
数组
掌握数组的定义和实现,加深对数组的类型理解。
掌握数组的存储结构和访问方式。
掌握特殊矩阵的存储方法。
假设稀疏矩阵A和B均以三元组表作为存储结构。
试写出矩阵相加的算法,另设三元组C存放结果矩阵。
#defineMAXSIZE100
typedefstruct
introw,col;
inte;
}Triple;
Tripledata[MAXSIZE+1];
intm,n,len;
}TSMatrix;
voidInput(TSMatrix*pA)
intnrow,ncol,num,elem,i;
请输入矩阵的行数,列数和非零元素个数:
%d%d%d"
nrow,&
ncol,&
pA->
m=nrow;
n=ncol;
len=num;
for(i=1;
=num;
printf("
请输入第%d个元素的行号、列号和元素值:
i);
scanf("
elem);
pA->
data[i].row=nrow;
data[i].col=ncol;
data[i].e=elem;
voidPrint(TSMatrix*pA)
inti,j,t;
for(i=1,t=1;
=pA->
m;
{for(j=1;
n;
j++)
{
if(pA->
data[t].row==i&
pA->
data[t].col==j)
{
printf("
%4d"
pA->
data[t].e);
t++;
}
else
0);
}
voidAdd(TSMatrix*pA,TSMatrix*pB,TSMatrix*pC)
if(pA->
m!
=pB->
m||pA->
n!
n)
两个矩阵的行数与列数不相等,不能相加!
return;
/*111111*/
pC->
m=pA->
n=pA->
i=1;
t=0;
len&
len)
if(((pA->
data[i].row-1)*pA->
n+pA->
data[i].col-1)<
((pB->
data[j].row-1)*pB->
n+pB->
data[j].col-1))
t++;
data[t].row=pA->
data[i].row;
data[t].col=pA->
data[i].col;
data[t].e=pA->
data[i].e;
else
if(((pA->
data[i].col-1)>
t++;
data[t].row=pB->
data[t].col=pB->
data[t].e=pB->
if(pA->
data[i].e+pB->
data[j].e!
=0)
{
t++;
data[j].e;
j++;
}
t++;
i++;
while(j<
len=t;
TSMatrixA,B,C;
Input(&
A);
Print(&
B);
Add(&
A,&
B,&
C);
实验五
二叉树的应用
掌握二叉树的性质和存储结构;
掌握二叉树的遍历和线索化及其应用;
掌握哈夫曼树的应用。
生成如下二叉树,并得出三种遍历结果:
#defineERROR0;
#defineOK1;
typedefintElemType;
typedefstructBinaryTree{
ElemTypedata;
structBinaryTree*l;
structBinaryTree*r;
}*BiTree,BiNode;
BiNode*New(){
return((BiNode*)malloc(sizeof(BiNode)));
intCreateSubTree(BiTree*T,ElemType*all,inti){
if(all[i]==0||i>
16){
*T=NULL;
returnOK;
*T=New();
if(*T==NULL)returnERROR;
(*T)->
data=all[i];
CreateSubTree(&
((*T)->
l),all,2*i);
r),all,2*i+1);
voidCreateBiTree(BiTree*T){
ElemTypeall[16]={0,1,2,3,0,0,4,5,0,0,0,0,6,0,0,0};
CreateSubTree(T,all,1);
intprintelem(ElemTyped){
%d"
d);
intPreOrderTraverse(BiTreeT,int(*Visit)(ElemTyped)){
if(T){
if(Visit(T->
data))
if(PreOrderTraverse(T->
l,Visit))
if(PreOrderTraverse(T->
r,Visit))returnOK;
elsereturnOK;
intInOrderTraverse(BiTreeT,int(*Visit)(ElemTyped)){
if(PreOrderTrave
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据结构 报告