数据结构作业.docx

上传人:聆听****声音 文档编号:790191 上传时间:2023-04-30 格式:DOCX 页数:20 大小:18.20KB
下载 相关 举报
数据结构作业.docx_第1页
第1页 / 共20页
数据结构作业.docx_第2页
第2页 / 共20页
数据结构作业.docx_第3页
第3页 / 共20页
数据结构作业.docx_第4页
第4页 / 共20页
数据结构作业.docx_第5页
第5页 / 共20页
数据结构作业.docx_第6页
第6页 / 共20页
数据结构作业.docx_第7页
第7页 / 共20页
数据结构作业.docx_第8页
第8页 / 共20页
数据结构作业.docx_第9页
第9页 / 共20页
数据结构作业.docx_第10页
第10页 / 共20页
数据结构作业.docx_第11页
第11页 / 共20页
数据结构作业.docx_第12页
第12页 / 共20页
数据结构作业.docx_第13页
第13页 / 共20页
数据结构作业.docx_第14页
第14页 / 共20页
数据结构作业.docx_第15页
第15页 / 共20页
数据结构作业.docx_第16页
第16页 / 共20页
数据结构作业.docx_第17页
第17页 / 共20页
数据结构作业.docx_第18页
第18页 / 共20页
数据结构作业.docx_第19页
第19页 / 共20页
数据结构作业.docx_第20页
第20页 / 共20页
亲,该文档总共20页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

数据结构作业.docx

《数据结构作业.docx》由会员分享,可在线阅读,更多相关《数据结构作业.docx(20页珍藏版)》请在冰点文库上搜索。

数据结构作业.docx

作业11.建立两个顺序表通过随机函数生成2.排序升序输出合并前的结果

3.对这两个顺序表进行合并保持升序4.输出合并结果5.分析算法复杂度

#include

#include"stdio.h"

#include"math.h"

#include"malloc.h"

#include"stdlib.h"

#definemaxsize1024

typedefintDataType;

typedefstruct

{DataTypedata[maxsize];

intlength;

}SequenList;

intmain(intargc,char*argv[])

{SequenList*L1,*L2,*L3;

voidInitList(SequenList*La);

voidPrintList(SequenList*La);

voidOrderList(SequenList*La);

voidMergeList(SequenList*La,SequenList*Lb,SequenList*Lc);

L1=(SequenList*)malloc(sizeof(SequenList));

L2=(SequenList*)malloc(sizeof(SequenList));

L3=(SequenList*)malloc(sizeof(SequenList));

InitList(L1);

InitList(L2);

printf("thearrayofa:

\n");

OrderList(L1);

PrintList(L1);

printf("thearrayofb:

\n");

OrderList(L2);

PrintList(L2);

MergeList(L1,L2,L3);

printf("thearrayofc:

\n");

PrintList(L3);

return0;

}

voidInitList(SequenList*La)//用随机函数建立数组

{inti,n;

printf("pleaseinputthelengthofSequenList\n");

scanf("%d",&n);

La->length=n;

for(i=0;i

La->data[i]=rand()%100;

}

voidPrintList(SequenList*La)//输出数组

{inti;

printf("thelistdatais:

\n");for(i=0;ilength;i++)

printf("%d",La->data[i]);

printf("\n");

}

voidOrderList(SequenList*La)//数组选择法排序升序

{inti,j,p,t;

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

{p=i;

for(j=i+1;jlength;j++)

if(La->data[p]>La->data[j])p=j;

t=La->data[i];La->data[i]=La->data[p];La->data[p]=t;

}

}

voidMergeList(SequenList*La,SequenList*Lb,SequenList*Lc)//合并数组升序

{inti,j,k;

i=0;j=0;k=0;

Lc->length=La->length+Lb->length;

while(ilength&&jlength)

{if(La->data[i]data[j])

{Lc->data[k]=La->data[i];i++;k++;}

else

{Lc->data[k]=Lb->data[j];j++;k++;}

}

while(ilength)

{Lc->data[k]=La->data[i];i++;k++;}

while(jlength)

{Lc->data[k]=Lb->data[j];j++;k++;}

}

作业21.建立两个递增有序链表带表头用头插法2.输出两个链表合并前的结果。

3.将两个单链表进行合并并保持递增有序。

4.输出合并结果。

#include"malloc.h"

#include"stdio.h"

#include"cstdlib"

typedefintElemType;

typedefstructLNode{

ElemTypedata;

structLNode*next;

}LN;

structLNode*InitList();

voidPrintList(structLNode*la);

voidMergeList(structLNode*la,structLNode*lb,structLNode*lc);

intmain(intargc,char*argv[])

{structLNode*head1,*head2,*head3;

head1=InitList();

head2=InitList();

head3=InitList();PrintList(head1);

PrintList(head2);

MergeList(head1,head2,head3);

PrintList(head3);

return0;

}

structLNode*InitList()//初始化链表建立链表有表头

{intn,t;

structLNode*lp,*p;

lp=(LNode*)malloc(sizeof(LNode));

lp->data=0;lp->next=NULL;

printf("inputlengthoflist:

");

scanf("%d",&n);

while(n>0)

{printf("pleaseinputdata:

\n");

scanf("%d",&t);

p=(LNode*)malloc(sizeof(LNode));

p->data=t;

p->next=lp->next;

lp->next=p;

n--;

}

returnlp;

}

voidMergeList(structLNode*la,structLNode*lb,structLNode*lc)//合并链表

{structLNode*L1,*L2,*L3;

L1=la->next;L2=lb->next;L3=lc;

la->next=NULL;lb->next=NULL;

while(L1&&L2)

{if(L1->data<=L2->data)

{L3->next=L1;

L3=L1;

L1=L1->next;

}

else

{L3->next=L2;

L3=L2;

L2=L2->next;

}

}

L3->next=L1?

L1:

L2;

}

voidPrintList(structLNode*lp)//输出链表

{structLNode*p;

printf("thelistdata:

");

p=lp->next;while(p)

{printf("%d",p->data);

p=p->next;

}

printf("\n");

}

作业3分别用顺序栈和链栈用栈解决括号匹配问题。

1)顺序栈

#include"stdio.h"

#include"malloc.h"

#defineMAX_SIZE100

typedefstruct

{charstack[MAX_SIZE];

inttop;

}SeqStack;

voidInitStack(SeqStack&s);

voidPush(SeqStack&s,charch);

voidPop(SeqStack&s);

intCheck(SeqStack&s);

charGetTop(SeqStack&s);

intStackEmpty(SeqStack&s);

intmain(intargc,char*argv[])

{SeqStacks;

InitStack(s);

if(Check(s))

printf("匹配成功\n");

else

printf("匹配不成功输入有误\n");

return0;

}

voidInitStack(SeqStack&s)//初始化栈

{s.top=-1;

}

voidPush(SeqStack&s,charch)//入栈

{if(s.top>=MAX_SIZE-1)

printf("thestackisoverflow\n");

else

{s.top++;

s.stack[s.top]=ch;

}

}

voidPop(SeqStack&s)//出栈

{if(StackEmpty(s))

printf("thestackisempty\n");

else

s.top--;}

intCheck(SeqStack&s)//配对检查

{charch;

while((ch=getchar())!

='#')

{switch(ch)

{case'{':

case'[':

case'(':

Push(s,ch);break;

case')':

if(!

StackEmpty(s)&&GetTop(s)=='(')

{Pop(s);break;}

elsereturn0;

case']':

if(!

StackEmpty(s)&&GetTop(s)=='[')

{Pop(s);break;}

elsereturn0;

case'}':

if(!

StackEmpty(s)&&GetTop(s)=='{')

{Pop(s);break;}

elsereturn0;

default:

break;

}

}

return(StackEmpty(s));

}

intStackEmpty(SeqStack&s)//判栈是否为空

{if(s.top==-1)

return1;

else

return0;

}

charGetTop(SeqStack&s)//得到栈顶元素

{if(!

StackEmpty(s))

returns.stack[s.top];

else

{printf("栈已经为空\n");

return0;

}

}

2)链栈

#include"stdio.h"

#include"malloc.h"

typedefstructNode

{chardata;

structNode*next;

}LinkStack;

voidInitStack(LinkStack&s);

voidPush(LinkStack&s,charch);

voidPop(LinkStack&s);intCheck(LinkStack&s);

charGetTop(LinkStack&s);

intStackEmpty(LinkStack&s);

intmain(intargc,char*argv[])

{LinkStacks;

InitStack(s);

if(Check(s))

printf("匹配成功\n");

else

printf("匹配不成功输入有误\n");

return0;

}

voidInitStack(LinkStack&s)//初始化栈

{s.next=NULL;

s.data=0;

}

voidPush(LinkStack&s,charch)//入栈

{LinkStack*p;

p=(LinkStack*)malloc(sizeof(LinkStack));

if(p)

{p->data=ch;

p->next=s.next;

s.next=p;

}

else

{printf("内存分配失败\n");}

}

voidPop(LinkStack&s)//出栈

{LinkStack*p;

if(StackEmpty(s))

{printf("thestackisempty\n");}

else

{p=s.next;

s.next=s.next->next;

free(p);

}

}

intCheck(LinkStack&s)//配对检查

{charch;

while((ch=getchar())!

='#')

{switch(ch)

{case'{':

case'[':

case'(':

Push(s,ch);break;

case')':

if(!

StackEmpty(s)&&GetTop(s)=='(')

{Pop(s);break;}elsereturn0;

case']':

if(!

StackEmpty(s)&&GetTop(s)=='[')

{Pop(s);break;}

elsereturn0;

case'}':

if(!

StackEmpty(s)&&GetTop(s)=='{')

{Pop(s);break;}

elsereturn0;

default:

break;

}

}

return(StackEmpty(s));

}

intStackEmpty(LinkStack&s)//判栈是否为空

{if(s.next)

return0;

else

return1;

}

charGetTop(LinkStack&s)

{if(StackEmpty(s))

{printf("栈已经为空\n");

return0;

}

else

{returns.next->data;}

}

作业41.设计创建二叉树的程序函数名(CreatBitTree)可用递归的方法2.设计二叉树的三种遍历(前序

中序后序)递归的方法

#include"stdio.h"

#include"malloc.h"

typedefstructNode

{chardata;

structNode*Lc,*Rc;

}BTnode,*BTree;//定义二叉树的结点

voidCreatBitTree(BTree&T);

voidPreorder(BTree&T);

voidInorder(BTree&T);

voidPostorder(BTree&T);

intmain(intargc,char*argv[])

{BTreeT;

CreatBitTree(T);

printf("\n先序遍历\n");

Preorder(T);

printf("\n中序遍历\n");

Inorder(T);

printf("\n后序遍历\n");Postorder(T);

printf("\n");

return0;

}

voidCreatBitTree(BTree&T)//创建二叉树先序递归方法

{charch;

scanf("%c",&ch);

if(ch=='#')

T=NULL;

else

{T=(structNode*)malloc(sizeof(structNode));

if(!

T)

printf("内存分配失败\n");

else

{T->data=ch;

CreatBitTree(T->Lc);

CreatBitTree(T->Rc);

}

}

}

voidPreorder(BTree&T)//先序递归遍历二叉树

{if(T)

{printf("%c",T->data);

Preorder(T->Lc);

Preorder(T->Rc);

}

}

voidInorder(BTree&T)//中序递归遍历二叉树

{if(T)

{Inorder(T->Lc);

printf("%c",T->data);

Inorder(T->Rc);

}

}

voidPostorder(BTree&T)//后序递归遍历二叉树

{if(T)

{Postorder(T->Lc);

Postorder(T->Rc);

printf("%c",T->data);

}

}

作业7

1)无向图的邻接矩阵存储深度优先搜索

#include"stdio.h"

#defineMAX_VERTEX_NUM50//顶点的最大数目

intvisited[MAX_VERTEX_NUM];//访问标志数组typedefcharDatatype;

typedefstruct

{Datatypevexs[MAX_VERTEX_NUM];

intedges[MAX_VERTEX_NUM][MAX_VERTEX_NUM];

intn,e;//顶点数和边数

}Ugraph;//无向图

voidCreate_UG(Ugraph&ga);

voidDFS(Ugraphga);

voidDFSM(Ugraphga,inti);

intmain(intargc,char*argv[])

{Ugraphga;

Create_UG(ga);

DFS(ga);

printf("HelloWorld!

\n");

return0;

}

voidCreate_UG(Ugraph&ga)//创建无向图

{inti,j,k,w;

printf("输入无向图的顶点数和边数:

\n");

scanf("%d%d",&ga.n,&ga.e);

printf("请输入顶点信息建立顶点信息表:

\n");

getchar();

for(i=0;i

scanf("%c",&ga.vexs[i]);

getchar();

for(i=0;i

for(j=0;j

ga.edges[i][j]=0;

for(k=0;k

{printf("请输入第%d条边的顶点序号ij和权值w:

\n",k+1);

scanf("%d%d%d",&i,&j,&w);

ga.edges[i-1][j-1]=w;

ga.edges[j-1][i-1]=w;

}

}

voidDFS(Ugraphga)//深度优先搜索法遍历无向图

{inti;

for(i=0;i

visited[i]=0;//访问标志数组初始化

for(i=0;i

if(!

visited[i])

DFSM(ga,i);

}

voidDFSM(Ugraphga,inti)//在邻接矩阵上递归的深度优先遍历图

{intj;

printf("深度优先遍历结点:

%c\n",ga.vexs[i]);visited[i]=1;

for(j=0;j

if((ga.edges[i][j]!

=0)&&!

visited[j])

DFSM(ga,j);

}

2)无向图的邻接表存储深度优先搜索

#include"stdio.h"

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

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2