C语言数据结构将链串里所有值为x的字符删除

用带头结点的单链表表示链串,每个结点存放一个字符。设计一个算法,将链串s中所有值为x的字符删除。要求算法的时间复杂度均为O(n)、空间复杂度O(1).

#include<stdio.h>
#include<malloc.h>
#include<stdlib.h>
#define Maxsize 100
typedef struct snode
{
char data;
struct snode*next;
}LinkStrNode;
void StrAssign(LinkStrNode*&s,char cstr[],int n)//生成串 
{
int i;
LinkStrNode*r,*p;
s=(LinkStrNode*)malloc(sizeof(LinkStrNode));
r=s;
for(i=0;i<n;i++)
{
p=(LinkStrNode*)malloc(sizeof(LinkStrNode));
p->data=cstr[i];
r->next=p;r=p;
}
r->next=NULL;
}
void DestroyStr(LinkStrNode*&s)//销毁串 
{
LinkStrNode*pre=s,*p=s->next;
while(p!=NULL)
{
free(pre);
pre=p;
p=pre->next;
}
free(pre);
}
void DispStr(LinkStrNode*s)//输出串 
{
LinkStrNode*p=s->next;
while(p!=NULL)


{
printf("%c",p->data);
p=p->next;

}
printf("\n");
}
LinkStrNode *DelStr(LinkStrNode*s)
{

LinkStrNode*str,*p=s->next,*q,*r;int k=0;
str=(LinkStrNode*)malloc(sizeof(LinkStrNode));
str->next=NULL;
r=str;
while(p!=NULL)
{   

if(p->data=='x')
{
p=p->next;
/*q=(LinkStrNode*)malloc(sizeof(LinkStrNode));
q->data=p->data;
r->next=q;
r=q;k++;*/

}
else
{
q=(LinkStrNode*)malloc(sizeof(LinkStrNode));
q->data=p->data;
r->next=q;
r=q;
p=p->next;
}

}
r->next=NULL;
DispStr(str);
return str;
}


int main(){
LinkStrNode*s;char cstr[Maxsize];
int i,n;
printf("有多少个字符?");
scanf("%d",&n);fflush(stdin);
printf("请输%d个字符:",n); 
for(i=0;i<n;i++)
{
scanf("%c",&cstr[i]);
}
StrAssign(s,cstr,n);DispStr(s);
DelStr(s);

return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值