数据结构之串的应用

来源:互联网 发布:js控制button点击 编辑:程序博客网 时间:2024/05/18 00:25

串的定义:
串即字符串,是最基本的非数值数据之一,它是一种特殊的线性表,特殊在于组成线性表的每一个元素都是一个字符。

串的顺序存储定义:

typedef struct{    char ch[max];    int len;}seqstring;

串的链式存储定义:

typedef struct str{    char ch[max];    struct str*next;}str;typedef struct{    str*head,*tail;    int curlen;}nodestr;

串的堆分配存储定义:

typedef struct{    char *ch;    int len;}hstring;

因为在顺序串上进行插入和删除操作并不方便,需要移动大量字符,且又为了节约空间,所以大多采用堆分配的串存储方式。

考虑到顺序串 应用,本文采用顺序串

串插入:输入主串,和子串,以及插入的位置,输出合并后的主串

代码

#include<stdio.h>#define max 10typedef struct {    char ch[max];    int len; } seqstring; void instr(seqstring s,int i,seqstring t) {    int j;    if(t.len<=0)    {        printf("the string is empty\n");        return;     }     else if((i<=0)||(i>=s.len+1))     {        printf("the location is unable");        return;     }     else if(s.len+t.len>=max)     {        printf("the string is too long \n");        return;     }     else      {        for(j=s.len;j>=i;j--)            s.ch[j+t.len]=s.ch[j];         for(j=0;j<t.len;j++)            s.ch[i+j]=t.ch[j];            s.len=s.len+t.len;            printf("be inserted the string:\n");            puts(s.ch);     } } int main() {    seqstring string;    seqstring s,t;    int i,j;    i=0;    s.len=0;    t.len=0;    printf("input the string s and t:\n");    gets(s.ch);    gets(t.ch);    for(i=0;s.ch[i]!='\0';i++)    s.len++;    for(i=0;t.ch[i]!='\0';i++)    t.len++;    printf("input the insert location:");    scanf("%d",&i);    instr(s,i,t);    return 0; }

这里写图片描述


最长公共子串:输入两个字符串,求出其中最大的公共子串

代码

#include<stdio.h>#include<string.h>#define max 20typedef struct{    int len;    char ch[max]; } seqstring; void comstrmax(seqstring*s,seqstring*t) {    int position=0,maxlen=0,i=0,j,k,length;    while(i<s->len)    {        j=0;        while(j<t->len)        {            if(s->ch[i]==t->ch[j])            {            length=1;            for(k=1;s->ch[i+k]==t->ch[j+k];k++)            length++;            if(length>maxlen)            {                position=i;                maxlen=length;             }             j+=length;          }           else j++;     }     i++;    }    printf("\nthe string:'%s'and sting:'%s'de comstrmax:",s->ch,t->ch);    for(i=0;i<maxlen;i++)    printf("%c",s->ch[position+i]); } int main() {    seqstring*str0,*str1;    printf("the str0:");scanf("%s",str0->ch);    str0->len=strlen(str0->ch);    printf("the str1:");scanf("%s",str1->ch);    str1->len=strlen(str1->ch);    comstrmax(str0,str1);    return 0; }

这里写图片描述

总结
本次采用的都是顺序串的存储结构,原因无他,简单是最重要的原因,至于其他的,就是顺序串更加便于理解字符串的工作机理。

原创粉丝点击