用链表给你作的 (其实是很早以前作的几个东西剪切一些功能那到这里的一个产物)给你调试过了 有问题可以找我
[email protected]#include <stdio.h>
#include <malloc.h>
typedef struct ym
{
char Data;
struct ym * Next;
}Zhizhen;
Zhizhen * Jl();//建立链表
void Xs(Zhizhen * Hend);//显示链表
void Cx(Zhizhen *pHend, char Data, Zhizhen **jgwz);//查询 头指针 要查找的字符 结果位置
int Sc(Zhizhen ** pHend, Zhizhen * p_dizi);//删除
void main()
{
Zhizhen * pHend;
Zhizhen * jgwz;
char sj;
int x;
printf("请输入字符串:\n");
pHend = Jl();
printf("您输入的字符串如下:\n");
Xs(pHend);
printf("请输入要删除的字符:\n");
sj = getchar();
Cx(pHend, sj, &jgwz);
if (NULL == jgwz)
{
printf("没有找到对应的字母!\n");
return;
}
x = Sc(&pHend, jgwz);
if(x == 0)
{
printf("删除错误!\n");
return;
}
printf("删除字符%c后的字符串如下:\n",sj);
Xs(pHend);
}
Zhizhen * Jl()
{
Zhizhen * Hend = NULL;
Zhizhen * p = NULL;
Zhizhen * q = NULL;
char Cdata = 'a';
int Temp = 0;
Cdata = getchar();
if (Cdata == 10 && Temp == 0)
{
return NULL;
Temp++;
}
Hend = (Zhizhen *)malloc(sizeof(Zhizhen));
Hend->Data = Cdata;
Hend->Next = NULL;
q = Hend;
Cdata = getchar();
while(Cdata != 10)
{
p = (Zhizhen *)malloc(sizeof(Zhizhen));
p->Data = Cdata;
p->Next = NULL;
q->Next = p;
q = p;
Cdata = getchar();
}
return Hend;
}
void Xs(Zhizhen * Hend)
{
int Temp = 1;
while(Temp)
{
printf("%c",Hend->Data);
if(NULL == Hend->Next)
{
Temp = 0;
}
else
{
Hend = Hend->Next ;
}
}
printf("\n");
}
int Sc(Zhizhen ** pHend_dizhi, Zhizhen * p_sc)
{
Zhizhen *q;
Zhizhen *pHend = *pHend_dizhi;
if(pHend == p_sc)
{
*pHend_dizhi = (*pHend_dizhi)->Next;
free(pHend);
pHend = NULL;
return 1;//成功
}
q = pHend->Next;
while(q != NULL)
{
if(q == p_sc)
{
pHend->Next = q->Next;
free(q);
q = NULL;
return 1;//成功
}
else
{
pHend = q;
q = pHend->Next;
}
}
return 0;//删除错误
}
void Cx(Zhizhen *pHend, char Data, Zhizhen **jgwz)
{
do
{
if(pHend->Data == Data)
{
(*jgwz) = pHend;
return;
}
pHend = pHend->Next ;
}
while(pHend->Next != NULL);
if(pHend->Data == Data)
{
(*jgwz) = pHend;
return;
}
(*jgwz) = NULL;
}