求java中数据结构的讲解,如:链表,二叉树
答案:2 悬赏:30 手机版
解决时间 2021-12-22 17:15
- 提问者网友:欺烟
- 2021-12-22 11:39
求java中数据结构的讲解,如:链表,二叉树
最佳答案
- 五星知识达人网友:末日狂欢
- 2021-12-22 12:11
主要是3种接口:List Set Map
List:ArrayList,LinkedList:顺序表ArrayList,链表LinkedList,堆栈和队列可以使用LinkedList模拟
Set:HashSet没有重复记录的集合
Map:HashMap就是哈希表
二叉树可以利用递归的思想来模拟自行设计,从JDK5开始还提供了一个新的队列接口
图!!!没遇到过这样的情况,恐怕还是要自己模拟
List:ArrayList,LinkedList:顺序表ArrayList,链表LinkedList,堆栈和队列可以使用LinkedList模拟
Set:HashSet没有重复记录的集合
Map:HashMap就是哈希表
二叉树可以利用递归的思想来模拟自行设计,从JDK5开始还提供了一个新的队列接口
图!!!没遇到过这样的情况,恐怕还是要自己模拟
全部回答
- 1楼网友:从此江山别
- 2021-12-22 13:19
typedef struct csnode
{
telemtype data;
struct csnode *firstchild,*nextsibling;
}csnode,*cstree;
status inittree(cstree *t)
{
*t=null;
return ok;
}
void destroytree(cstree *t)
{
if(*t)
{
if((*t)->firstchild)
destroytree(&(*t)->firstchild);
if((*t)->nextsibling)
destroytree(&(*t)->nextsibling);
free(*t);
*t=null;
}
}
typedef cstree qelemtype;
#include"c3-2.h"
#include"bo3-2.c"
status createtree(cstree *t)
{
char c[20];
cstree p,p1;
linkqueue q;
int i,l;
initqueue(&q);
printf("请输入根结点(字符型,空格为空): ");
scanf("%c%*c",&c[0]);
if(c[0]!=nil)
{
*t=(cstree)malloc(sizeof(csnode));
(*t)->data=c[0];
(*t)->nextsibling=null;
enqueue(&q,*t);
while(!queueempty(q))
{
dequeue(&q,&p);
printf("请按长幼顺序输入结点%c的所有孩子: ",p->data);
gets(c);
l=strlen(c);
if(l>0)
{
p1=p->firstchild=(cstree)malloc(sizeof(csnode));
p1->data=c[0];
for(i=1;inextsibling=(cstree)malloc(sizeof(csnode));
enqueue(&q,p1);
p1=p1->nextsibling;
p1->data=c[i];
}
p1->nextsibling=null;
enqueue(&q,p1);
}
else
p->firstchild=null;
}
}
else
*t=null;
return ok;
}
#define cleartree destroytree
status treeempty(cstree t)
{
if(t)
return false;
else
return true;
}
int treedepth(cstree t)
{
cstree p;
int depth,max=0;
if(!t)
return 0;
if(!t->firstchild)
return 1;
for(p=t->firstchild;p;p=p->nextsibling)
{
depth=treedepth(p);
if(depth>max)
max=depth;
}
return max+1;
}
telemtype value(cstree p)
{
return p->data;
}
telemtype root(cstree t)
{
if(t)
return value(t);
else
return nil;
}
cstree point(cstree t,telemtype s)
{
linkqueue q;
qelemtype a;
if(t)
{
initqueue(&q);
enqueue(&q,t);
while(!queueempty(q))
{
dequeue(&q,&a);
if(a->data==s)
return a;
if(a->firstchild)
enqueue(&q,a->firstchild);
if(a->nextsibling)
enqueue(&q,a->nextsibling);
}
}
return null;
}
status assign(cstree *t,telemtype cur_e,telemtype value)
{
cstree p;
if(*t)
{
p=point(*t,cur_e);
if(p)
{
p->data=value;
return ok;
}
}
return nil;
}
telemtype parent(cstree t,telemtype cur_e)
{
cstree p,t;
linkqueue q;
initqueue(&q);
if(t)
{
if(value(t)==cur_e)
return nil;
enqueue(&q,t);
while(!queueempty(q))
{
dequeue(&q,&p);
if(p->firstchild)
{
if(p->firstchild->data==cur_e)
return value(p);
t=p;
p=p->firstchild;
enqueue(&q,p);
while(p->nextsibling)
{
p=p->nextsibling;
if(value(p)==cur_e)
return value(t);
enqueue(&q,p);
}
}
}
}
return nil;
}
telemtype leftchild(cstree t,telemtype cur_e)
{
cstree f;
f=point(t,cur_e);
if(f&&f->firstchild)
return f->firstchild->data;
else
return nil;
}
telemtype rightsibling(cstree t,telemtype cur_e)
{
cstree f;
f=point(t,cur_e);
if(f&&f->nextsibling)
return f->nextsibling->data;
else
return nil;
}
status insertchild(cstree *t,cstree p,int i,cstree c)
{
int j;
if(*t)
{
if(i==1)
{
c->nextsibling=p->firstchild;
p->firstchild=c;
}
else
{
p=p->firstchild;
j=2;
while(p&&jnextsibling;
j++;
}
if(j==i)
{
c->nextsibling=p->nextsibling;
p->nextsibling=c;
}
else
return error;
}
return ok;
}
else
return error;
}
status deletechild(cstree *t,cstree p,int i)
{
cstree b;
int j;
if(*t)
{
if(i==1)
{
b=p->firstchild;
p->firstchild=b->nextsibling;
b->nextsibling=null;
destroytree(&b);
}
else
{
p=p->firstchild;
j=2;
while(p&&jnextsibling;
j++;
}
if(j==i)
{
b=p->nextsibling;
p->nextsibling=b->nextsibling;
b->nextsibling=null;
destroytree(&b);
}
else
return error;
}
return ok;
}
else
return error;
}
void preordertraverse(cstree t,void(*visit)(telemtype))
{
if(t)
{
visit(value(t));
preordertraverse(t->firstchild,visit);
preordertraverse(t->nextsibling,visit);
}
}
void postordertraverse(cstree t,void(*visit)(telemtype))
{
cstree p;
if(t)
{
if(t->firstchild)
{
postordertraverse(t->firstchild,visit);
p=t->firstchild->nextsibling;
while(p)
{
postordertraverse(p,visit);
p=p->nextsibling;
}
}
visit(value(t));
}
}
void levelordertraverse(cstree t,void(*visit)(telemtype))
{
cstree p;
linkqueue q;
initqueue(&q);
if(t)
{
visit(value(t));
enqueue(&q,t);
while(!queueempty(q))
{
dequeue(&q,&p);
if(p->firstchild)
{
p=p->firstchild;
visit(value(p));
enqueue(&q,p);
while(p->nextsibling)
{
p=p->nextsibling;
visit(value(p));
enqueue(&q,p);
}
}
}
}
}
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯