[数据结构]链串的copy

 

#include  < iostream >
using   namespace  std;

struct  StrNode;
typedef 
struct  StrNode  * PStrNode;
struct  StrNode{
    
char  c;
    PStrNode link;
};
typedef 
struct  StrNode  * LinkString;


void   copyStr_link(LinkString   & t,  LinkString  s)
/*  将s所指的带头结点的链串复制为t 所指的带头结点的链串 */
{     PStrNode p,q,r;
     t 
=  (PStrNode)malloc( sizeof ( struct  StrNode));   /*  创建带头结点的空链串  */
     
if ( t  ==  NULL )  {
            printf( 
" Out of space! "  );
            
return  ;
     }
    
else     t -> link  =  NULL;
    p 
=  s -> link; 
     r 
=  t;
     
while  (p  !=  NULL) {
        q 
=  (PStrNode)malloc( sizeof ( struct  StrNode));
         
if  (q == NULL)
                  { printf( 
" Out of space! "  );
                       
return ;
                  }
          q
-> =  p -> c;
          q
-> link  =  NULL;
        r
-> link  =  q;             /*  结点放入子链串中  */
        r 
=  q;
        p 
=  p -> link;
     }  
 }

LinkString  createStr_link(){
    LinkString s 
=  (LinkString)malloc( sizeof ( struct  StrNode));
    s
-> link  =  NULL;
    
char  ch,flag;
    PStrNode r 
=  s;
    cout
<< " 输入字符串结束字符: " ;
    cin
>> flag;
    cout
<< " 输入字符串中的各个字符,以 " << flag << " 为结束符: " ;
    cin
>> ch;
    
while (ch  !=  flag){
        PStrNode p 
=  (PStrNode)malloc( sizeof ( struct  StrNode));
        
if (p  ==  NULL){
            cout
<< " 内存溢出! " << endl;
            
return  s;
        }
        
else  {
            p
-> c = ch;
            p
-> link  =  NULL;
            r
-> link  =  p;
            r 
=  p;
        }
        cin
>> ch;
    }
    
return  s;
}

void  printStr_link(LinkString s){
    PStrNode p 
=  s -> link;
    
while  (p != NULL){
        cout
<< p -> c;
        p
= p -> link;
    }
    cout
<< endl;
}

void  main(){
    LinkString s,t;
    s 
=  createStr_link();
    printStr_link(s);
    copyStr_link(t,s);
    printStr_link(t);
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值