永发信息网

求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开始还提供了一个新的队列接口
图!!!没遇到过这样的情况,恐怕还是要自己模拟
全部回答
  • 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); } } } } }
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯