数据结构实验15答案.docx

上传人:b****6 文档编号:5864686 上传时间:2023-01-01 格式:DOCX 页数:14 大小:17.53KB
下载 相关 举报
数据结构实验15答案.docx_第1页
第1页 / 共14页
数据结构实验15答案.docx_第2页
第2页 / 共14页
数据结构实验15答案.docx_第3页
第3页 / 共14页
数据结构实验15答案.docx_第4页
第4页 / 共14页
数据结构实验15答案.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

数据结构实验15答案.docx

《数据结构实验15答案.docx》由会员分享,可在线阅读,更多相关《数据结构实验15答案.docx(14页珍藏版)》请在冰豆网上搜索。

数据结构实验15答案.docx

数据结构实验15答案

数据结构实验

1、设计序链表,要求:

(1)链表的基本操作:

初始化、求数据元素个数、插入、删除和取数据元素。

(2)设计一个测试主函数,验证链表的正确性。

#include

#include

#defineERROR-1

#defineOK1

typedefstructNode

{

chardata;

structNode*next;

}Node,*LinkList;

voidInitList(LinkList*L)

{

*L=(LinkList)malloc(sizeof(Node));

(*L)->next=NULL;

}

voidCreateFromHead(LinkListL)/*头插法*/

{

Node*s;

charc;

intflag=1;

printf("输入要插入的结点,输入$结束");

while(flag)

{

c=getchar();

if(c!

='$')

{

s=(Node*)malloc(sizeof(Node));

s->data=c;

s->next=L->next;

L->next=s;

}

elseflag=0;

}

}

Node*get(LinkListL,inti)/*查找*/

{

intj;

Node*p;

if(i<=0)returnNULL;

p=L;

j=0;

while((p->next!

=NULL)&&(j

{

p=p->next;

j++;

}

if(i==j)returnp;

elsereturnNULL;

}

intListLength(LinkListL)/*求长度*/

{

Node*p;

intj;

p=L->next;

j=0;

while(p!

=NULL)

{

p=p->next;

j++;

}

returnj;

}

intDelList(LinkListL,inti,char*e)/*删除*/

{

Node*pre,*r;

intk;

pre=L;

k=0;

while(pre->next!

=NULL&&k

{

pre=pre->next;

k=k+1;

}

if(!

(pre->next))

{

printf("删除结点的位置i不合理!

");

returnERROR;

}

r=pre->next;

pre->next=pre->next->next;

e=r->data;

free(r);

returnOK;

}

main()

{

Node*p;

inti;

char*e=0,m=0;

LinkListL;

InitList(&L);

CreateFromHead(L);

i=ListLength(L);

printf("输入要删除的结点\n");

scanf("%d",&i);

DelList(L,i,e);

printf("输入要提取的结点\n");

scanf("%d",&i);

p=get(L,i);

printf("长度为%d\n",i);

printf("结点=%c",p->data);

}

2、堆栈设计,要求:

(1)设计顺序堆栈,堆栈的操作包括:

初始化,非空否,入栈,取栈顶数据元素。

(2)设计一个主函数对顺序堆栈进行测试。

#include

#defineM50

#defineFALSE-1

#defineTRUE1

typedefstructstack

{

intelem[M];

inttop;

}SeqStack;

voidInitStack(SeqStack*s)

{

s->top=-1;

}

intpush(SeqStack*s,intx)

{

if(s->top==M-1)

return(FALSE);

s->top++;

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

return(TRUE);

}

intGetTop(SeqStack*s,intx)

{

if(s->top==-1)

return(FALSE);

else

{

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

return(x);

}

}

voidmain()

{

intm,p;

SeqStacks;

InitStack(&s);

printf("输入数据,输入0结束");

while(m)

{

scanf("%d",&m);

push(&s,m);

}

printf("取栈顶数据元素输入1,否则输入0");

scanf("%d",&m);

if(m==1)

p=GetTop(&s,m);

printf("栈顶数据元素%d",p);

}

上机实验3:

编写一个函数,完成字符串S1寻找子字符串S2

(匹配),并编写主函数测试所编写程序。

#include

#include

#defineMaxSize100

typedefstruct//定义串

{

charstr[MaxSize];

intlen;

}String;

voidDisplay(String*s)//显示s串

{

inti;

printf("\n");

for(i=0;ilen;i++)

printf("%c",s->str[i]);

}

voidStrDelete(String*s,inti,intk)/*删掉s串中位置i开始的k个字符*/

{

intj;

if(i>s->len||i+k>s->len)

printf("位置参数值错误\n");

else

{

for(j=i+k;jlen;j++)/*将s的第i+k个位置之后的字串前移k位*/

s->str[j-k]=s->str[j];

s->len=s->len-k;/*修改s长度*/

s->str[s->len]='\0';

}

}

StrIndex(Strings,Stringt)/*求s串中t子串的位置(从0开始)*/

{

inti=0,j=0;

while(i

{

if(s.str[i]==t.str[j])

{

i++;

j++;

}

else

{

i=i-j+1;

j=0;

}

}

if(j==t.len)

{

printf("子串是");

for(i=0;i

printf("%c",t.str[i]);

}

else

printf("子串不存在");

}

voidStrInsert(String*s,inti,Stringt)/*s串中位置i处插入t串*/

{

Stringr;

intj;

if(i>s->len)

printf("位置参数值错误\n");

else

{

for(j=i;jlen;j++)/*将s的第i个位置之后的字串复制到r中*/

r.str[j-i]=s->str[j];

r.len=j-i;

r.str[r.len]='\0';

for(j=0;j

s->str[i+j]=t.str[j];

for(j=0;j

s->str[i+t.len+j]=r.str[j];

s->len=s->len+t.len;/*修改s串长度*/

s->str[s->len]='\0';

}

}

voidStrAssign(String*s,chart[])/*s串内容由t串内容代替*/

{

inti=0;

while(t[i]!

='\0')

{

s->str[i]=t[i];

i++;

}

s->str[i]='\0';

s->len=i;

}

voidmain()

{

Stringa,b;

charc[20];

printf("请输入字串s1\n");

scanf("%s",c);

StrAssign(&a,c);

a.len=20;

printf("请输入三位数字串s2\n");

scanf("%s",c);

StrAssign(&b,c);

b.len=3;

StrIndex(a,b);

Display(&a);

Display(&b);

getch();

}

上机实验4:

设矩阵A、B、C为压缩存储方式的n阶上3角矩阵,矩阵元素为整数,要求:

(1)编写实现矩阵加C=A+B的函数;

(2)编写实现C=A*B的函数;

编写主程序测试

#include

#include

#include

#defineMAXSIZE100/*非零元素的个数最多为100*/

/*稀疏矩阵三元组表的类型定义*/

typedefstruct

{

introw,col;/*该非零元素的行下标和列下标*/

inte;/*该非零元素的值*/

}Triple;

typedefstruct

{

Tripledata[MAXSIZE+1];/*非零元素的三元组表。

data[0]未用*/

intm,n,len;/*矩阵的行数、列数和非零元素的个数*/

}TSMatrix;

voidAddTSMatrix(TSMatrixA,TSMatrixB,TSMatrix*C)/*矩阵B和矩阵A相加*/

{

inti=0,j=0;

C->m=A.m;

C->n=A.n;

C->len=0;

while(i

{

if((A.data[i].row==B.data[j].row)&&(A.data[i].col==B.data[j].col))

{

C->data[C->len].row=A.data[i].row;

C->data[C->len].col=A.data[i].col;

C->data[C->len++].e=A.data[i].e+B.data[j].e;

i++;

j++;

}

elseif((A.data[i].row==B.data[j].row)&&(A.data[i].col>B.data[j].col))

{

C->data[C->len].row=B.data[j].row;

C->data[C->len].col=B.data[j].col;

C->data[C->len++].e=B.data[j].e;

j++;

}

elseif((A.data[i].row==B.data[j].row)&&(A.data[i].col

{

C->data[C->len].row=A.data[i].row;

C->data[C->len].col=A.data[i].col;

C->data[C->len++].e=A.data[i].e;

i++;

}

elseif(A.data[i].row>B.data[j].row)

{

C->data[C->len].row=B.data[j].row;

C->data[C->len].col=B.data[j].col;

C->data[C->len++].e=B.data[j].e;

j++;

}

else//if(A.data[i].row

{

C->data[C->len].row=A.data[i].row;

C->data[C->len].col=A.data[i].col;

C->data[C->len++].e=A.data[i].e;

i++;

}

}

if(i==A.len&&j

{

C->data[C->len].row=B.data[j].row;

C->data[C->len].col=B.data[j].col;

C->data[C->len++].e=B.data[j].e;

j++;

}

elseif(i

{

C->data[C->len].row=A.data[i].row;

C->data[C->len].col=A.data[i].col;

C->data[C->len++].e=A.data[i].e;

i++;

}

}

voidShowTSMatrix(TSMatrixM)/*打印矩阵M*/

{

inti,j,dir=0;

for(i=0;i

{

for(j=0;j

{

if(M.data[dir].row==i&&M.data[dir].col==j)/*存在非零元*/

{

printf("%d",M.data[dir].e);

dir++;

}

else

printf("0");

}

printf("\n");

}

}

voidInitTSMatrix(TSMatrix*M)/*打印矩阵M*/

{

inti,j;

M->len=0;

for(i=0;im;i++)

{

for(j=0;jn;j++)

{

if(rand()<0.3*RAND_MAX)

{

M->data[M->len].row=i;

M->data[M->len].col=j;

M->data[M->len].e=1;

M->len++;

}

}

}

}

voidmain()

{

TSMatrixA,B,C;

A.m=5;

A.n=5;

B.m=5;

B.n=5;

srand((unsigned)time(NULL));

InitTSMatrix(&A);

printf("ThematrixAis:

\n");

ShowTSMatrix(A);

InitTSMatrix(&B);

printf("ThematrixBis:

\n");

ShowTSMatrix(B);

AddTSMatrix(A,B,&C);

printf("ThematrixCis:

\n");

ShowTSMatrix(C);

}

 

上机实验5:

#include

voidmain()

{

voidprint(intw);

intn;

scanf("%d",&n);

print(n);

}

voidprint(intw)

{

inti;

if(w!

=0)

{

print(w-1);

for(i=1;i<=w;++i)

printf("%3d",w);

printf("\n");

}

}

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

当前位置:首页 > 经管营销

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

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