チェーン列の基本操作

5757 ワード

問題およびコード:
/*
 *copyright(c) 2016         
 *All rights reserved
 *    :test.cpp
 *  :  
 *  :v6.0
 *
 *    :         
 *    : 
 *    :
*/

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct Node
{
    char data;
    struct Node *next;
} LiString;
void StrAssign(LiString *&s,char cstr[])
{
    int i;
    LiString *r,*p;
    s=(LiString *)malloc(sizeof(LiString));
    r=s;
    for(i=0; i<(int)strlen(cstr); i++)
    {
        p=(LiString*)malloc(sizeof(LiString));
        p->data=cstr[i];
        r->next=p;
        r=p;
    }
    r->next=NULL;
}
void DispStr(LiString *s)
{
    LiString *p=s->next;
    while(p!=NULL)
    {
        printf("%c",p->data);
        p=p->next;
    }
    printf("
"); } void StrLength(LiString *s) { int i=0; LiString *p=s->next; while(p!=NULL) { i++; p=p->next; } printf("%d
",i); } LiString *InsStr(LiString *s,int i,LiString *t) { int k; LiString *str,*p=s->next,*p1=t->next,*q,*r; str=(LiString*)malloc(sizeof(LiString)); str->next=NULL; r=str; for(k=1; k<i; k++) { q=(LiString*)malloc(sizeof(LiString)); q->data=p->data; r->next=q; r=q; p=p->next; } while(p1!=NULL) { q=(LiString*)malloc(sizeof(LiString)); q->data=p1->data; r->next=q; r=q; p1=p1->next; } while(p!=NULL) { q=(LiString*)malloc(sizeof(LiString)); q->data=p->data; r->next=q; r=q; p=p->next; } r->next=NULL; return str; } LiString *DelStr(LiString *s,int i,int j) { int k; LiString *str,*p=s->next,*q,*r; str=(LiString*)malloc(sizeof(LiString)); str->next=NULL; r=str; for(k=0; k<i-1; k++) { q=(LiString*)malloc(sizeof(LiString)); q->data=p->data; r->next=q; r=q; p=p->next; } for(k=0; k<j; k++)p=p->next; while(p!=NULL) { q=(LiString*)malloc(sizeof(LiString)); q->data=p->data; r->next=q; r=q; p=p->next; } r->next=NULL; return str; } LiString *RepStr(LiString *s,int i,int j,LiString *t) { int k; LiString *str,*p=s->next,*p1=t->next,*q,*r; str=(LiString*)malloc(sizeof(LiString)); str->next=NULL; r=str; for(k=0; k<i-1; k++) { q=(LiString*)malloc(sizeof(LiString)); q->data=p->data; q->next=NULL; r->next=q; r=q; p=p->next; } for(k=0; k<j; k++)p=p->next; while(p1!=NULL) { q=(LiString*)malloc(sizeof(LiString)); q->data=p1->data; q->next=NULL; r->next=q; r=q; p1=p1->next; } while(p!=NULL) { q=(LiString*)malloc(sizeof(LiString)); q->data=p->data; q->next=NULL; r->next=q; r=q; p=p->next; } r->next=NULL; return str; } LiString *TiStr(LiString *s,int i,int j) { LiString *str; int k=0,m=0; char c[50]= {0}; while(s!=NULL) { k++; if(k<=i+j&&k>i)c[m++]=s->data; s=s->next; } StrAssign(str,c); return str; } LiString *Concat(LiString *s,LiString *t) { LiString *str,*p=s->next,*q,*r; str=(LiString*)malloc(sizeof(LiString)); r=str; while(p!=NULL) { q=(LiString*)malloc(sizeof(LiString)); q->data=p->data; r->next=q; r=q; p=p->next; } p=t->next; while(p!=NULL) { q=(LiString*)malloc(sizeof(LiString)); q->data=p->data; r->next=q; r=q; p=p->next; } r->next=NULL; return str; } int main() { LiString *s,*s1,*s2,*s3; char c[]="abcdefghefghijklmn",d[]="xyz"; StrAssign(s,c); // StrAssign(s1,d); DispStr(s); // StrLength(s); s2=InsStr(s,9,s1); // s1 s DispStr(s2); s2=DelStr(s,2,5); // s DispStr(s2); s2=RepStr(s,2,5,s1); // s s1 DispStr(s2); s2=TiStr(s,2,10); // s 10 DispStr(s2); s3=Concat(s1,s2); // s1 s2 DispStr(s3); return 0; }