• 链串



            链串的组织形式和一般的链表类似,主要的区别在于:链串中一个结点可以存储多个字符。通常将链串中结点存储的字符个数称为结点大小。

    #include<iostream>
    using namespace std;
    
    typedef struct snode
    {
    	char data;
    	struct snode *next;
    }LiString;
    
    void StrAssign(LiString * &s,char cstr[] )
    {
    	int i;
    	LiString *r,*p;
    	s=(LiString *)malloc (sizeof(LiString));
    	r=s;
    	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)
    {
    	LiString *p=t->next,*q,*r;
    	s=(LiString *)malloc (sizeof(LiString));
    	r=s;
    	while(p!=NULL)
    	{
    		q->data=p->data;
    		r->next=q;
    		r=q;
    		p=p->next;
    	}
    	r->next=NULL;
    }
    
    int 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 1;
    	else
    		return 0;
    }
    
    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)
    	{
    		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;
    
    }
    
    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;
    	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++)
    	{
    		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;
    	if(i<=0||i>StrLength(s)+1)
    		return 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;
    		p1=p1->next;
    	}
    	r->next=NULL;
    	return str;
    }
    
    LiString *DelStr(LiString *s,int i,int j)
    {
    	LiString *str,*p=s->next,*q,*r;
    	str=(LiString *)malloc (sizeof(LiString));
    	r=str;
    	int k;
    	if(i<0||i>StrLength(s)||j<0||i+j-1>StrLength(s))
    		return 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;
    	r=str;
    	if(i<0||i>StrLength(s)||j<0||i+j-1>StrLength(s))
    		return str;
    	for(k=0;k<i;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(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;
    }
    
    void DispStr(LiString *s)
    {
    	LiString *p=s->next;
    	while(p!=NULL)
    	{
    		printf("%c",p->data);
    		p=p->next;
    	}
    	printf("
    ");
    }
    



  • 相关阅读:
    .net下将富文本编辑器文本原样读入word文档
    最大流算法完整代码
    如何用程序删除win 7下SYSTEM权限的目录
    01背包问题的动态规划算法
    使用gem安装jekyll错误记录
    dev机上数据库中批量生成table
    git pull错误记录及解决
    git clone操作到开发机的错误记录
    nginx错误记录
    链表链式结构的写法
  • 原文地址:https://www.cnblogs.com/keanuyaoo/p/3285640.html
Copyright © 2020-2023  润新知