数据结构——串的链式存储

#include <iostream>
using namespace std;

typedef
struct node
{
char data;
struct node *next;
}LinkStrNode;
typedef LinkStrNode
* LinkString; //链式串的指针

//初始化串
void Init_LinkString(LinkString &ls)
{
ls
=(LinkStrNode *)malloc(sizeof(LinkStrNode));
ls
->next=NULL;
}
//打印串
void Print_LinkString(LinkString &ls)
{
if(!ls->next)
cout
<<"空串!"<<endl;
else
{
LinkStrNode
*cur=ls->next;
while(cur)
{
cout
<<cur->data;
cur
=cur->next;
}
}
}
//给串赋值
void Build_LinkString(LinkString &ls,char *str)
{
LinkStrNode
*pre=ls;
int length=strlen(str);
int i;
for(i=0;i<length;i++)
{
LinkStrNode
*temp=(LinkStrNode *)malloc(sizeof(LinkStrNode));
temp
->data=str[i];
temp
->next=NULL;
pre
->next=temp;
pre
=pre->next;
}
}
//求串的长度
int LinkStringLen(LinkString &ls)
{
int len=0;
LinkStrNode
*cur=ls->next;
while(cur)
{
len
++;
cur
=cur->next;
}
return len;
}

//串复制
/*

void LinkStringCopy(LinkString &to,LinkString &from)
{
LinkStrNode *cur=from->next;
LinkStrNode *pre=to;
while(cur)
{
LinkStrNode *temp=(LinkStrNode *)malloc(sizeof(LinkStrNode));
temp->data=cur->data;
cur=cur->next;
temp->next=NULL;
pre->next=temp;
pre=pre->next;
}
}
*/
//串连接
/*

void LinkStringCat(LinkString &ls1,LinkString &ls2)
{
LinkStrNode *cur=ls2->next;
LinkStrNode *pre=ls1->next;
while(pre->next!=NULL)
pre=pre->next;
pre->next=cur;
}
*/
//串比较
/*

int LinkStringcmp(LinkString &ls1,LinkString &ls2)
{
LinkStrNode *cur1=ls1->next;
LinkStrNode *cur2=ls2->next;
while(cur1 && cur2)
{
if(cur1->data != cur2->data)
return cur1->data - cur2->data;
cur1=cur1->next;
cur2=cur2->next;
}
if(cur1)
return 1;
else if(cur2)
return -1;
else
return 0;
}
*/
//提取hs1中的子串
/*

LinkString LinkStringSub(LinkString &ls, int index, int len)
{
LinkString temp;
Init_LinkString(temp);
int length=LinkStringLen(ls);
if(len>length-index+1)
{
cout<<"提取的子串过长!"<<endl;
}
else
{

LinkStrNode *lscur=ls->next;
LinkStrNode *pre=temp; //把需要提取的子符复制到temp上
int i=1;
while(i!=index)
{
lscur=lscur->next;
i++;
}
i=1;
while(i<=len)
{
LinkStrNode *lstemp=(LinkStrNode *)malloc(sizeof(LinkStrNode));
lstemp->data=lscur->data;
lscur=lscur->next;
lstemp->next=NULL;
pre->next=lstemp;
pre=pre->next;
i++;
}
}
return temp;
}
*/
//向串s中第index个位置插入串t
void LinkStringInsert(LinkString &s, int index, LinkString &t)
{
LinkStrNode
*spre=s; //指向被插串的index位置的前一个字符
LinkStrNode *scur=s->next; //指向被插串的index位置
int i=1;
while(i!=index)
{
spre
=scur;
scur
=scur->next;
i
++;
}
LinkStrNode
*tpre=t->next; //插入串的第一个字符的指针
LinkStrNode *tcur=tpre; //插入串的最后一个字符的指针
while(tcur->next!=NULL)
{
tcur
=tcur->next;
}
tcur
->next=scur;
spre
->next=tpre;
free(t);
}
//替换
void LinkStringRep(LinkString &s, int index,int len, LinkString &t)
{
LinkStrNode
*scur=s->next;
LinkStrNode
*tcur=t->next;
int i=1;
while(i!=index)
{
scur
=scur->next;
i
++;
}
for(i=0;i<len;i++)
{
if(scur!=NULL)
{
scur
->data=tcur->data;
scur
=scur->next;
tcur
=tcur->next;
}
else
{
scur
=(LinkStrNode *)malloc(sizeof(LinkStrNode));
scur
->data=tcur->data;
scur
->next=NULL;
}
}

}
int main()
{
LinkString ls1;
Init_LinkString(ls1);
//给串赋值
char *str1="Hello World!";
Build_LinkString(ls1,str1);
cout
<<LinkStringLen(ls1)<<endl; //长度
Print_LinkString(ls1);
cout
<<endl;

LinkString ls2;
Init_LinkString(ls2);
//给串赋值
char *str2="fuckyou!";
Build_LinkString(ls2,str2);
cout
<<LinkStringLen(ls2)<<endl;
Print_LinkString(ls2);
cout
<<endl;

//串复制
//LinkString ls3;
//Init_LinkString(ls3);
//LinkStringCopy(ls3,ls1);
//cout<<LinkStringLen(ls3)<<endl;
//Print_LinkString(ls3);
//cout<<endl;

//串连接
//LinkStringCat(ls1,ls2);
//cout<<LinkStringLen(ls1)<<endl;
//Print_LinkString(ls1);
//cout<<endl;

//串1和串2比较
/*
int result=LinkStringcmp(ls1,ls2);
if(result>0)
cout<<"串1大于串2"<<endl;
else if(result==0)
cout<<"串1等于串2"<<endl;
else
cout<<"串1小于串2"<<endl;
*/

//提取hs1中的子串
//cout<<"提取的子串是:"<<endl;
//LinkString lssub=LinkStringSub(ls1, 7, 6);
//Print_LinkString(lssub);
//cout<<endl;

//插入串
LinkStringInsert(ls1, 13, ls2);
Print_LinkString(ls1);
cout
<<endl;

//替换
LinkString T;
Init_LinkString(T);
char *str3="********";
Build_LinkString(T,str3);
LinkStringRep(ls1,
13,8, T);
Print_LinkString(ls1);
cout
<<endl;

return 0;
}

 

posted @ 2010-07-28 15:04  忧国忧铭  Views(1495)  Comments(0)    收藏  举报