赞
踩
目录
- #define ElemType char
-
- typedef struct Strnode{
- ElemType data;
- struct Strnode *next;
- }Strnode,*StrLink;
- void StrLink_Creat(StrLink &S)
- {
- //初始化 创建头节点
- S = (StrLink)malloc(sizeof(Strnode));
- S->next = NULL;
-
- ElemType data;
- Strnode *p = S;
- printf("创建串:");
- scanf("%c",&data);
- while( data != '\n')
- {
- Strnode *s=(Strnode *)malloc(sizeof(Strnode));
-
- s->data = data;
- s->next = p->next;
- p->next = s;
- p=p->next;
- scanf("%c",&data);
- }
-
- }
- int StrLink_Length(StrLink S)
- {
- int i = 0;
- while(S->next)
- {
- S = S->next;
- i++;
- }
- return i;
- }
- void StrLink_Copy(StrLink S1 ,StrLink &S2)
- {
- if(!S1->next){
- S2->next = NULL;
- }
- S2->next = NULL;
-
- Strnode *p = S2;
- while(S1->next)
- {
- Strnode *s=(Strnode *)malloc(sizeof(Strnode));
- S1 = S1->next;
- s->data = S1->data;
- s->next = p->next;
- p->next = s;
- p = p->next;
- }
- }
- //S1>S2 返回>0 S1==S2 返回0 S1<S2 返回<0
- int StrLink_Compare(StrLink S1,StrLink S2)
- {
- int temp;
- while(S1->next && S2->next)
- {
- S1 = S1->next;
- S2 = S2->next;
- temp = S1->data -S2->data;
- if(temp){
- return temp;
- }
- }
- if((!S1->next) && (!S2->next))
- {
- return 0;
- }else if(!S1->next){
- return -1;
- }
- else if(!S2->next){
- return 1;
- }
- }
- //返回子串出现位置
- int StrLink_Index(StrLink S1,StrLink S2)
- {
- int i = 0, flag = 0;
- Strnode *p1 = S1;
- Strnode *p2 = S2;
- while(p1->next)
- {
- if(p1->next->data == p2->next->data)
- {
- flag = 1;
- p1 = p1->next;
- p2 = p2->next;
- if(!p2->next){
- return i+1;
- }
- }else{
- if(flag == 1){
- flag = 0;
- p2 = S2;
- }else{
- p1 = p1->next;
- i++;
- }
- }
- }
- return 0;
-
- }
- void StrLink_Concat(StrLink &S1,StrLink S2)
- {
- Strnode *p = S1;
- while(p->next)
- {
- p=p->next;
- }
- while(S2->next)
- {
- Strnode *s=(Strnode *)malloc(sizeof(Strnode));
- s->data = S2->next->data;
- s->next = p->next;
- p->next = s;
- p = p->next;
- S2 = S2->next;
- }
- }
- void StrLink_Clean(StrLink &S)
- {
- Strnode *p = S;
- while(p->next)
- {
- Strnode *q = p->next;
- p->next = q->next;
- free(q);
- }
- printf("串清空成功\n");
- }
- void StrLink_IsEmpty(StrLink S)
- {
- if(S->next){
- printf("串不为空\n");
- }
- else{
- printf("串为空\n");
- }
- }
- void StrLink_Destory(StrLink &S)
- {
- free(S->next);
- S->next = NULL;
- printf("销毁成功\n");
- }
- void StrLink_Print(StrLink S)
- {
- while(S->next)
- {
- S = S->next;
- printf("%c",S->data);
- }
- printf("\n");
- }
- int main()
- {
- StrLink S1,S2,S3;
- // 1.创建串
- printf("串1:");
- StrLink_Creat(S1);
- printf("串2:");
- StrLink_Creat(S2);
- printf("串3:");
- StrLink_Creat(S3);
- // 2.复制
- StrLink_Copy(S1,S3);
- printf("复制串1后的串3:");
- StrLink_Print(S3);
- // 3. 比较大小 S1>S2 返回>0 S1==S2 返回0 S1<S2 返回<0
- printf("比较大小:%d\n",StrLink_Compare(S1,S2));
- // 4.查找子串
- printf("查找子串:%d\n",StrLink_Index(S1,S2));
- // 5.拼接两串
- StrLink_Concat(S1,S2);
- printf("拼接后的串1:");
- StrLink_Print(S1);
- // 6.清空
- StrLink_Clean(S1);
- // 7.判空
- StrLink_IsEmpty(S1);
- // 8.销毁
- StrLink_Destory(S1);
- StrLink_Print(S1);
- // 9.求串长
- printf("串3的长度为:%d\n",StrLink_Length(S3));
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。