第八周项目二:建立链串的算法库

来源:互联网 发布:pid算法实例讲解 编辑:程序博客网 时间:2024/05/04 10:36
/*Copyright (c)2015,烟台大学计算机与控制工程学院All rights reserved.文件名称:项目2.cbp作    者:孙立立完成日期:2015年11月30日版 本 号:v1.0问题描述:定义链串的存储结构,实现其基本运算,并完成测试。 输入描述:无程序输出:测试数据*/

  • listring.h头文件代码
#ifndef LISTRING_H_INCLUDED#define LISTRING_H_INCLUDED#include <stdio.h>#include <malloc.h>typedef struct snode{    char data;    struct snode *next;} LiString;void StrAssign(LiString *&s,char cstr[]);   //字符串常量cstr赋给串svoid StrCopy(LiString *&s,LiString *t); //串t复制给串sbool StrEqual(LiString *s,LiString *t); //判串相等int StrLength(LiString *s); //求串长LiString *Concat(LiString *s,LiString *t);  //串连接LiString *SubStr(LiString *s,int i,int j);  //求子串LiString *InsStr(LiString *s,int i,LiString *t) ;   //串插入LiString *DelStr(LiString *s,int i,int j);  //串删去LiString *RepStr(LiString *s,int i,int j,LiString *t);  //串替换void DispStr(LiString *s);  //输出串#endif // LISTRING_H_INCLUDED


listring.cpp文件代码:

#include "listring.h"void StrAssign(LiString *&s,char cstr[])    //字符串常量cstr赋给串s{    int i;    LiString *r,*p;    s=(LiString *)malloc(sizeof(LiString));    r=s;                        //r始终指向尾节点    for (i=0;cstr[i]!='\0';i++)    {   p=(LiString *)malloc(sizeof(LiString));        p->data=cstr[i];        r->next=p;r=p;    }    r->next=NULL;}void StrCopy(LiString *&s,LiString *t)  //串t复制给串s{    LiString *p=t->next,*q,*r;    s=(LiString *)malloc(sizeof(LiString));    r=s;                //r始终指向尾节点    while (p!=NULL)     //将t的所有节点复制到s    {   q=(LiString *)malloc(sizeof(LiString));        q->data=p->data;        r->next=q;r=q;        p=p->next;    }    r->next=NULL;}bool StrEqual(LiString *s,LiString *t)  //判串相等{    LiString *p=s->next,*q=t->next;    while (p!=NULL && q!=NULL && p->data==q->data)    {   p=p->next;        q=q->next;    }    if (p==NULL && q==NULL)        return true;    else        return false;}int StrLength(LiString *s)  //求串长{    int i=0;    LiString *p=s->next;    while (p!=NULL)    {   i++;        p=p->next;    }    return i;}LiString *Concat(LiString *s,LiString *t)   //串连接{    LiString *str,*p=s->next,*q,*r;    str=(LiString *)malloc(sizeof(LiString));    r=str;    while (p!=NULL)         //将s的所有节点复制到str    {   q=(LiString *)malloc(sizeof(LiString));        q->data=p->data;        r->next=q;r=q;        p=p->next;    }    p=t->next;    while (p!=NULL)         //将t的所有节点复制到str    {   q=(LiString *)malloc(sizeof(LiString));        q->data=p->data;        r->next=q;r=q;        p=p->next;    }    r->next=NULL;    return str;}LiString *SubStr(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;                      //r指向新建链表的尾节点    if (i<=0 || i>StrLength(s) || j<0 || i+j-1>StrLength(s))        return str;             //参数不正确时返回空串    for (k=0;k<i-1;k++)        p=p->next;    for (k=1;k<=j;k++)          //将s的第i个节点开始的j个节点复制到str    {   q=(LiString *)malloc(sizeof(LiString));        q->data=p->data;        r->next=q;r=q;        p=p->next;    }    r->next=NULL;    return str;}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;                              //r指向新建链表的尾节点    if (i<=0 || i>StrLength(s)+1)       //参数不正确时返回空串        return str;    for (k=1;k<i;k++)                   //将s的前i个节点复制到str    {   q=(LiString *)malloc(sizeof(LiString));        q->data=p->data;        r->next=q;r=q;        p=p->next;    }    while (p1!=NULL)                    //将t的所有节点复制到str    {   q=(LiString *)malloc(sizeof(LiString));        q->data=p1->data;        r->next=q;r=q;        p1=p1->next;    }    while (p!=NULL)                     //将*p及其后的节点复制到str    {   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;                      //r指向新建链表的尾节点    if (i<=0 || i>StrLength(s) || j<0 || i+j-1>StrLength(s))        return str;             //参数不正确时返回空串    for (k=0;k<i-1;k++)         //将s的前i-1个节点复制到str    {   q=(LiString *)malloc(sizeof(LiString));        q->data=p->data;        r->next=q;r=q;        p=p->next;    }    for (k=0;k<j;k++)               //让p沿next跳j个节点        p=p->next;    while (p!=NULL)                 //将*p及其后的节点复制到str    {   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;                          //r指向新建链表的尾节点    if (i<=0 || i>StrLength(s) || j<0 || i+j-1>StrLength(s))        return str;                 //参数不正确时返回空串    for (k=0;k<i-1;k++)             //将s的前i-1个节点复制到str    {   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沿next跳j个节点        p=p->next;    while (p1!=NULL)                //将t的所有节点复制到str    {   q=(LiString *)malloc(sizeof(LiString));        q->data=p1->data;q->next=NULL;        r->next=q;r=q;        p1=p1->next;    }    while (p!=NULL)                 //将*p及其后的节点复制到str    {   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;}void DispStr(LiString *s)   //输出串{    LiString *p=s->next;    while (p!=NULL)    {   printf("%c",p->data);        p=p->next;    }    printf("\n");}


main.cpp文件代码:

#include "listring.h"int main(){    LiString *s1,*s2,*s3,*s4,*s5;    printf("链串的基本运算如下:\n");    printf("  (1)建立串s1和串s2\n");    StrAssign(s1,"ABCDEFGHIJKLMN");    printf("  (2)输出串s1:");    DispStr(s1);    printf("  (3)串s1的长度:%d\n",StrLength(s1));    StrAssign(s2,"^_^");    printf("  (4)输出串s2:");    DispStr(s2);    printf("  (5)串s2的长度:%d\n",StrLength(s2));    printf("  (6)在串s1的第9个字符位置插入串s2而产生串s3\n");    s3=InsStr(s1,9,s2);    printf("  (7)输出串s3:");    DispStr(s3);    printf("  (8)串s3的长度:%d\n",StrLength(s3));    printf("  (9)删除串s1第2个字符开始的3个字符而产生串s3\n");    s3=DelStr(s1,2,3);    printf("  (10)输出串s3:");    DispStr(s3);    printf("  (11)串s3的长度:%d\n",StrLength(s3));    printf("  (12)将串s1第2个字符开始的5个字符替换成串s2而产生串s3\n");    s3=RepStr(s1,2,5,s2);    printf("  (13)输出串s3:");    DispStr(s3);    printf("  (14)串s2的长度:%d\n",StrLength(s3));    printf("  (15)提取串s1的第2个字符开始的10个字符而产生串s4\n");    s4=SubStr(s1,2,10);    printf("  (16)输出串s4:");    DispStr(s4);    printf("  (17)串s4的长度:%d\n",StrLength(s4));    printf("  (18)将串s2和串s3连接起来而产生串s5\n");    s5=Concat(s2,s3);    printf("  (19)输出串s5:");    DispStr(s5);    printf("  (20)串s5的长度:%d\n",StrLength(s5));    return 0;}


运行结果:

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 来例假奶水少了怎么办 两岁宝宝吐口水怎么办 3岁宝宝不愿自己吃饭怎么办 婆家的人很烦人怎么办 三十了还没结婚怎么办 两岁宝贝断奶粉怎么办 宝宝断了母乳不吃奶粉怎么办 一岁宝宝不爱吃辅食怎么办 断奶后宝宝抗拒奶瓶怎么办 两岁宝宝断奶后不喝奶粉怎么办 两岁宝宝断奶不吃奶粉怎么办 宝宝断奶妈妈涨奶怎么办 三岁宝宝智商低怎么办 宝宝断奶晚上哭的厉害怎么办 2岁宝宝半夜喝奶粉怎么办 两岁宝宝不爱吃饭怎么办 快两岁的宝宝不爱吃饭怎么办 宝宝断奶后不愿意喝奶粉怎么办 宝宝断奶了不愿意喝奶怎么办? 宝宝断奶不愿意喝奶粉怎么办 宝宝断奶不愿意喝牛奶怎么办? 四个月宝宝断奶不吃奶粉怎么办 2岁不开口说话怎么办 八个月宝宝断奶不吃奶粉怎么办 宝宝断奶不喝奶粉怎么办 周岁 给娘家东西婆家看见怎么办 自己娘家妈总说婆家人坏话怎么办 娘家婆家老公都没有依靠怎么办? 2岁宝宝断奶粉怎么办 2岁宝宝夜奶频繁怎么办 宝宝15个月还在吃夜奶怎么办 宝宝两岁四个月还吃母乳怎么办 宝宝睡前老是找奶吃怎么办 宝宝戒奶晚上哭怎么办 宝宝戒奶半夜哭怎么办 吸习惯母乳不吸奶嘴怎么办 八个月宝宝奶睡怎么办 宝宝要吸着奶睡怎么办 戒母乳胸胀的疼怎么办 断奶孩子晚上哭的厉害怎么办 喜欢咬指甲的人怎么办?