回 帖 发 新 帖 刷新版面

主题:链式存储存结构方式下求子串

//*******以下是在链式存储存结构方式下求子串***
/****
#include <stdio.h>
#include <string.h>
#include<malloc.h>
#include<iostream.h>
#define MAXNUM 80
typedef struct node
{
    char str;
    struct node *next;
}slstrtype;
void SiInsert_back(slstrtype *h,char x);//后插入
void Output_before(slstrtype *head);//单链表正向输出
void substr(slstrtype *s1,slstrtype *s2,int m,int n);//求从s1第m个字符起,取长度为n的字符存在s2中
main()
{
    slstrtype *s1,*s2;
    int m,n,s1length;
    char InData;
    s1=(slstrtype *)malloc(sizeof(slstrtype));
    s1->str=NULL;
    s1->next=NULL;
    s2=(slstrtype *)malloc(sizeof(slstrtype));
    s2->str=NULL;
    s2->next=NULL;
    printf("请输入测试s1的长度:");
       scanf("%d",&s1length);
    printf("请输入%d个字符给s1:",s1length);
    for(int i=0;i<s1length;i++)
        {
          cin>>InData;
          SiInsert_back(s1,InData);//单链表的后插入
        }
    Output_before(s1);//单链表正向输出
    printf("请输入测试s1的位置:");
        scanf("%d",&m);
    printf("输入要取的个数:");
        scanf("%d",&n); 
    substr(s1,s2,m,n);//求从s1第m个字符起,取长度为n的字符存在s2中
    printf("输出字符串截取后的情况:");
    Output_before(s2);//单链表正向输出
}
void SiInsert_back(slstrtype *h,char x)//后插入

  slstrtype *p,*s;
  s=(slstrtype *)new (slstrtype);
  s->str=x;
  s->next=NULL;
  p=h->next;
  if(p==NULL)
    {
      h->next=s;
      return;
    }
  while(p->next!=NULL)
  p=p->next;
  p->next=s;
}
void Output_before(slstrtype *head)//单链表的输出
{
    slstrtype *p;
    p=head->next;
    while(p!=NULL)
        {
          printf("%c ",p->str);
          p=p->next;
        }
    printf("\n");
}
void substr(slstrtype *s1,slstrtype *s2,int m,int n)//求从s1第m个字符起,取长度为n的字符存在s2中
{
    slstrtype *p,*q,*v;
    int length1,j;
    p=s1;
    for(length1=0;p->next!=NULL;p=p->next)
        length1++;
    if(m<=0||m>length1||n<=0)
        {
          s2=NULL;
          printf("!!输入测试s1的位置参数错误.\n");
          return;
        }
    p=s1;
    for(j=0;j<m;j++)p=p->next;
    s2->next=(slstrtype*)malloc(sizeof(slstrtype));
    q=s2->next;
    for(j=0;j<n&&p!=NULL;j++)
        {
          q->str=p->str;
          p=p->next;
          q->next=(slstrtype *)malloc(sizeof(slstrtype));
          q=q->next;
        }
    q->str='\0';q->next=NULL;
    return;
}
****/
//*******以上是在链式存储存结构方式下求子串***

回复列表 (共2个回复)

沙发

很不错!!但总觉得
s1已经分配空间,s2再分配一次
显得有点浪费空间!

板凳

同意楼上说法

我来回复

您尚未登录,请登录后再回复。点此登录或注册