顺序串(sequence string) && 广义表(general list)

//顺序串 //11_3 #include<iostream> using namespace std; #define MAXSIZE 100 struct SqString{ char data[MAXSIZE]; int len; }; void Assign (SqString &s, char t[]){ int i=0; while(t[i]){ s.data[i]=t[i]; ++i; } s.len=i; } void DispStr(SqString s){ for(int i=0;i<s.len;++i) cout<<s.data[i]; cout<<endl; } int Index(SqString s,SqString t){ int i=0,j=0; while(i<s.len && j<t.len){ if(s.data[i]==t.data[j]) i++,j++; else i=i-j+1,j=0; } if(j==t.len) return i-t.len; else return -1; } int main(){ char str[MAXSIZE]; SqString sq1,sq2; cin>>str; Assign(sq1,str); cin>>str; Assign(sq2,str); DispStr(sq1); DispStr(sq2); cout<<Index(sq2,sq1)<<endl; return 0; } //CreatGL()和DispGL有bug //测试数据((),a) #include<iostream> using namespace std; const int SIZE=100; struct GLnode{ int tag; union{ char data; struct GLnode* sublist; }val; struct GLnode* link; }; GLnode * CreatGL(char * &s){ GLnode *h; char ch=*s; s++; if(ch){ h=(GLnode *)malloc(sizeof(GLnode)); if(ch=='('){ h->tag=1; h->val.sublist=CreatGL(s); } else if(ch==')') h=NULL; else{ h->tag=0; h->val.data=ch; } } else h=NULL; ch=*s; s++; if(h!=NULL) if(ch==',') h->link=CreatGL(s); else h->link=NULL; return h; } void DispGL(GLnode *g){ if(g!=NULL){ if(g->tag==1){ cout<<"("; if(g->val.sublist==NULL) cout<<"";// else DispGL(g->val.sublist); } else cout<<g->val.data; if(g->tag==1) cout<<")"; if(g->link!=NULL){ cout<<","; DispGL(g->link); } } } GLnode* Append(GLnode *gh,GLnode *gt){ gh->link=gt->val.sublist; gt->val.sublist=gh; return gt; } int main(){ char s[SIZE]; //测试创建,输出; cin>>s; char * ps=s; GLnode* gl=CreatGL(ps); DispGL(gl); cout<<endl; //表头表尾还原广义表; cin>>s; ps=s; GLnode* gl1=CreatGL(ps); cin>>s; ps=s; GLnode* gl2=CreatGL(ps); GLnode* t=Append(gl1,gl2); DispGL(t); cout<<endl; }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值