创建广义表,判断广义表是否相等
发布时间:2010年02月04日点击数:
次佚名
-
-
-
- char s[61];
-
-
-
-
- int sever(int a,int b)
- {
- int i,k;
- if(a>b) return 0;
- k=0;
- i=a;
- do
- {
- switch(s[i])
- {
- case '(': k++;break;
- case ')': k--;
- }
- i++;
- } while (!((k==0)&&(s[i]==',')||(i>b)));
-
- return i;
- }
-
-
-
-
- void create(node* &p,int i,int j)
- {
- int k;
- node *q;
- if(i>j)
- {
- return NULL;
- }
- else
- {
- p=new node();
- if(i==j)
- {
- p->tag=0;
- p->atom=s[i];
- }
- else
- {
- p->tag=1;
- p->next=NULL;
-
- i++;
- j--;
-
-
- k=sever(i,j);
-
-
- create(p->head,i,k-1);
-
- q=p->head;
- while(q!=NULL)
- {
- i=k+1;
- k=sever(q->next,i,k-1);
- q=q->next;
- }
- }
-
- }
-
- }
-
-
-
- int equal(node* s,node* t)
- {
- int r=0;
- if((s==NULL)&&(t==NULL))
- {
- r=1;
- }
- else
- {
- if((s!=NULL)&&(t!=NULL))
- {
- if(s->tag == t->tag)
- {
- switch(s->tag)
- {
- case 0:
- r=((s->atom==t->atom)&&(equal(s->next,t->next)==1));
- break;
- case 1:
- r=(equal(s->head,t->head)==1)&&(equal(s->next,t->next)==1);
- }
- }
- }
- }
- return r;
- }