鱼C论坛

 找回密码
 立即注册
查看: 3335|回复: 3

有关循环链表

[复制链接]
发表于 2013-10-13 11:19:19 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
脑子有点笨,老师让弄一个从一链表分成三种字符的循环链表,本以为可以跑通,结果,活活弄死机了两次,求大神,
#include <stdio.h>
#include <stdlib.h>
#define ok 1
#define error 0
#define SIZE 100
typedef char  ElemType;
typedef int Status;

typedef struct PNode
{
        ElemType     data;
        struct PNode *next;
}PNode,*PLinkList;

Status LnitPList(PLinkList &L)
{
        L = (PLinkList)malloc(sizeof(PNode));
        if ( L == NULL )return error;
        L->next = L;
        return ok;
}

Status CreatePList(PLinkList &L,char a[],int n)
{
        PLinkList p,q;
        int i;
        if( L )return error;
        p = L;
        for( i = 0;i < SIZE;i++ )
        {
                q = (PLinkList)malloc(sizeof(PNode));
                q->data = a[i];
                p->next = q->next;
                p->next = q;
                p = q;
        }
        p->next = NULL;
        return ok;
}

Status  ResolvePList(PLinkList L,PLinkList &ha,PLinkList &hb,PLinkList &hc)
{
       
        PLinkList p,p1,p2,p3,q1,q2,q3,s1,s2,s3;
        p = L;
        if (!L)return error;
        while(L&&p->data!='\n')
        {
                if ( p->data >= 0&&p->data <= 9 )
                {
                        p1 = ha;
                        q1 = (PLinkList)malloc(sizeof(PNode));
                        q1->data = p->data;
                        q1->next = p1->next;
                        p1->next =q1;
                        p1 = q1;

                }
                else if( p->data >= 'a'&&p->data <= 'z'||p->data >= 'A'&&p->data<='Z')
                {
                        p2 = hb;
                        q2 = (PLinkList)malloc(sizeof(PNode));
                        q2->data = p->data;
                        q2->next = p2->next;
                        p2->next =q2;
                        p2 = q2;
                }
                else
                {
                        p3 = hb;
                        q3 = (PLinkList)malloc(sizeof(PNode));
                        q3->data = p->data;
                        q3->next = p3->next;
                        p3->next =q3;
                        p3 = q3;
                }
        }
        p1->next = ha->next;
        s1 = ha;
        ha = s1->next;
        free(s1);
        p2->next = hb->next;
        s2 = hb;
        hb = s2->next;
        free(s2);
        p3->next = hc->next;
        s3 = hc;
        hc = s3->next;
        free(s3);
        return ok;
}
void print(PLinkList &L)
{
        PLinkList p;
        p = L;
        do
        {
                printf("%c",p->data);
                p = p->next;
        }
        while(p->data != L->data);
}
void main()
{
        char datas[SIZE];
        PNode *H,*H1,*H2,*H3;
        printf("输入一段字符串!\n");
       
    scanf("%s",datas);
        LnitPList(H);
        LnitPList(H1);
        LnitPList(H2);
        LnitPList(H3);
        CreatePList(H,datas,SIZE);
        ResolvePList(H,H1,H2,H3);
        print(H1);
        print(H2);
        print(H3);
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-10-13 11:38:06 | 显示全部楼层
已知由一个线性链表表示的线性表中含有三类字符(数字,字母,其他),试编写算法将该线性链表分割为三个循环链表,其中每个循环链表表示的线性表均只含一类字符。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-14 19:37:25 | 显示全部楼层
学习,继续升级中
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2013-10-16 15:23:11 | 显示全部楼层
整个程序看下来有些乱,单看下面两个函数定义
Status LnitPList(PLinkList &L)                 //参数PLinkList &L表示什么?这里应该是初始化循环链表吧
                                                         //那形参应设为PLinkList *L型
{
        L = (PLinkList)malloc(sizeof(PNode));       //按参数类型,这里用*L,下面也类似调整
        if ( L == NULL )return error;
        L->next = L;
        return ok;
}

Status CreatePList(PLinkList &L,char a[],int n)        //创建以字符串a为数据项的单链表?
                                                                        //同样改为PLinkList *L
{
        PLinkList p,q;
        int i;
        if( L )return error;
        p = L;
        for( i = 0;i < SIZE;i++ )
        {
                q = (PLinkList)malloc(sizeof(PNode));
                q->data = a[i];
                p->next = q->next;
                p->next = q;
                p = q;
        }
        p->next = NULL;
        return ok;
}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 18:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表