【数据结构·C语言】请高手帮忙检查一个关于【分割链表成子链表】的算法是否正确

已知由一个线性链表表示的线性表中含有三类字符的数据元素(如:字母字符、数字字符和其他字符),试编写算法将该线性表分割为三个循环链表,其中每个循环链表表示的线性表中均只含一... 已知由一个线性链表表示的线性表中含有三类字符的数据元素(如:字母字符、数字字符和其他字符),试编写算法将该线性表分割为三个循环链表,其中每个循环链表表示的线性表中均只含一类字符。

另:因为我是自学的数据结构,所以任何方面都有可能出问题,希望能够帮忙指出,不厌其详,谢谢!!!

Status Cut(LinkList &L,LinkList &A,LinkList &B,LinkList &C)
{
ElemType p=L, ha=A, hb=B, hc=C ;
int k , i ;
k=sizeof(p->next->data);
ha->next=p->next;
p=p->next; ha=ha->next;
A.length=1; B.length=0; C.length=0;
while(k==sizeof(p->next>data))
{
ha->next=p->next;
p=p->next; ha=ha->next;
A.length++;
}
i=sizeof(p->next->data);
while(k==sizeof(p->next->data)‖i==sizeof(p->next->data))
{
if(k==sizeof(p->next->data))
{ ha->next=p->next; p=p->next;
ha=ha->next; A.length++;
}
else
{
hb->next=p->next; p=p->next ;
hb=hb->next; B.length++;
}
}
while (p->next!=NULL)
{
if(k==sizeof(p->next->data))
{ ha->next=p->next; p=p->next;
ha=ha->next; A.length++;
}
else if
{
hb->next=p->next; p=p->next ;
hb=hb->next; B.length++;
}
else
{
hc->next=p->next; p=p->next ;
hc=hc->next; C.length++;
}
ha->next=A; hb->next=B; hc->next=C;
return OK;
}//Cut
展开
 我来答
未来需努力点缀
2013-04-11 · TA获得超过4678个赞
知道大有可为答主
回答量:850
采纳率:50%
帮助的人:507万
展开全部
楼主你好

你的代码写的有些繁琐 可读性不是很高
所以我帮你写了一个 供你参考:
#include<stdio.h>
#include<stdlib.h>
typedef struct node{
char ch;
struct node *next;
}*LinkList,Node;
void Create_List(LinkList &h)
{
LinkList p,rear;//p用于插入 rear是尾指针
h = (LinkList)malloc(sizeof(Node));
h->next = NULL;
rear = h;
printf("输入一串字符(回车结束):\n");
do{
p = (LinkList)malloc(sizeof(Node));
scanf("%c",&(p->ch));
rear->next = p;
rear = p;
}while(getchar()!='\n');//回车结束输入
rear->next = NULL;
}
void Disp_List(LinkList h)
{
LinkList p = h->next;//用于输出
while(p)
{
printf("%c\n",p->ch);
p = p->next;
}
}
void Cut(LinkList h, LinkList &Ch,LinkList &In,LinkList &Ot)
{
LinkList p,q;//p用于遍历主链表h q用于插入
Ch = (LinkList)malloc(sizeof(Node));
In = (LinkList)malloc(sizeof(Node));
Ot = (LinkList)malloc(sizeof(Node));
Ch->next = NULL;
In->next = NULL;
Ot->next = NULL;
p = h->next;
while(p)
{
q = (LinkList)malloc(sizeof(Node));//每次要重新分配插入结点的地址空间 否则q总是指向一个地址空间
q->ch = p->ch;//给插入结点q赋结点信息ch
if(q->ch >='0' && q->ch <='9')//如果是数字 插入到数字链表
{
q->next = In->next;
In->next = q;
}
else if((q->ch >='a' && q->ch <='z') || (q->ch >='A' && q->ch <='Z'))//如果是字母 插入到字母链表
{
q->next = Ch->next;
Ch->next = q;
}
else//插入到其他字符链表中
{
q->next = Ot->next;
Ot->next = q;
}
p = p->next;
}
}
int main()
{
LinkList L,Char,Integer,Other;//分别是链表L、字母链表、数字链表、其他符号链表
Create_List(L);
Cut(L,Char,Integer,Other);//分割链表
printf("字母有:\n");
Disp_List(Char);
printf("数字有:\n");
Disp_List(Integer);
printf("其他字符有:\n");
Disp_List(Other);
return 0;
}

希望能帮助你哈
追问
我不太懂哈,我的算法是用sizeof(p->data)的值不同来区分链表中的三种不同类型的元素,这样子可以吗?上面你给的算法我没看的很懂【水平不够Orz】,请问下是用什么方法区分三种不同类型的数据元素的?原题只是说(如:字母字符、数字字符和其他字符),也就是说也有可能3种都是其他种类的字符了?该怎么区分?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式