数据结构作业之孩子兄弟链表

数据结构作业,创建孩子兄弟链表

#include <stdio.h>
#include <stdlib.h>
/*树的结构*/ 
typedef struct snode
{
    char data;
    struct snode *firstchild,*nextsibing;
}tree,*Tree;
int inittree(Tree &L)
{
    L=(Tree)malloc(sizeof(tree));
    L->firstchild=L->nextsibing=NULL;
 return 1;
}
typedef struct queue
{
 Tree *data;
 int first,rear;
 int maxsize;
}squeue;
int initqueue(squeue *L)
{
 L->data=(Tree *)malloc(sizeof(Tree)*100);
 L->first=L->rear=0;
 L->maxsize=100;
 return 1;
}
int enqueue(squeue *L,Tree e)
{
 L->data[L->rear%L->maxsize]=e;
 L->rear=(L->rear+1)%L->maxsize;
 return 1;
}
Tree dequeue(squeue *L)
{
 Tree data;
 data=L->data[L->first];
 L->first=(L->first+1)%L->maxsize;
 return data;
}
Tree gettop(squeue L)
{
 Tree e;
 e=L.data[L.first];
 return e;
}
/*建立孩子兄弟链表 ,创建树*/ 
void createtree(Tree &T)
{
 T=NULL;
 char fa,ch;Tree P;Tree S;Tree R;
 squeue Q;initqueue(&Q);
 scanf("%c%c",&fa,&ch);
 while(ch!='#')
 {
  P=(Tree)malloc(sizeof(tree));
  P->data=ch;P->firstchild=P->nextsibing=NULL;
  enqueue(&Q,P);
  if(fa=='#')
   T=P;
  else
  {
   S=gettop(Q);
   while(S->data!=fa)
   {
    S=dequeue(&Q);
    S=gettop(Q);
   }
   if(S->firstchild==NULL)
   {
    S->firstchild=P;R=P;
   }
   else
   {
    R->nextsibing=P;R=P;
   }
  }
  scanf("%c%c",&fa,&ch);
 }
}
/*递归遍历*/ 
void preorder(Tree L)
{
 Tree P;
 for(P=L;P;P=P->nextsibing)
 {
  printf("%c ",P->data);
  if(P->firstchild!=NULL)
   preorder(P->firstchild);
 }
}
int main()
{
 Tree T;
 inittree(T);
 createtree(T);
 preorder(T);
 return 0; 
} 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值