鱼C论坛

 找回密码
 立即注册
查看: 2199|回复: 1

刚踏入数据结构的大门,求大神指导为什么我的插入输出时出现问题

[复制链接]
发表于 2014-10-15 18:43:51 | 显示全部楼层 |阅读模式

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

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

x
#include<stdio.h>
#include<stdlib.h>
typedef char datatype;
typedef struct node
{
        datatype data;
    struct node *next;
}linklist;
linklist *head;
linklist *creatlistf()//***************************************创建链表ok
{
        datatype ch;//逐个输入字符,以“回车”为结束符,返回单链表头指针
        linklist *head,*s,*r;
        head=(linklist*)malloc(sizeof(linklist));
        r=head;
        printf("输入链表各结点的数据:\n");
        while((ch=getchar())!='\n')
        {
                s=(linklist*)malloc(sizeof(linklist));//生成新结点
                s->data=ch;//将输入数据放入新节点的数据域中
                r->next=s;
                r=s;//将新结点插入到表头上
        }
        r->next=NULL;
        return head;//返回链表头指针
}
//**************************************************************************打印链表ok
void trave(linklist *l)
{
        linklist *p=l->next;
        while(p!=NULL)
        {
                printf("%c",p->data);
                p=p->next;
        }
        printf("\n");
}
//**************************************************************************计算链表长度
void LENGTH(linklist *l)
{
    linklist *p;
    p=l->next;
    int j=0;
    while(p!=NULL)
    {
        j++;
                p=p->next;   
    }
        printf("链表长度为:%d",j);
}

void GET(linklist *l,int i)//********************************按位置查找
{
        linklist *p;
        int j=0;
        p=l;
        while((p->next!=NULL)&&(j<i))
        {
                p=p->next;
                j++;
        }
        if(i==j)
                printf("能找到的值为%c:",p->data);
        else
                printf("不能找到该位置上的值");
}
void INSERT(linklist *l,datatype x,int i)//********************插入****************ok
{
        linklist *p,*s;
        p=l;
        int j;
        for(j=0;j<=i-1;j++)
        {
                p=p->next;
        }
        if(p==NULL)
        {
                printf("error,can not find");
                exit(0);
        }
        s=(linklist*)malloc(sizeof(linklist));
        s->data=x;
        s->next=p->next;
        p->next=s;
}

void DELETER(linklist *l,int i)/**********************删除****************/
{
        linklist *p=l,*r;
        int j;
        for(j=0;j<i-1;j++)
        {
                p=p->next;
        }
        if(p==NULL||p->next==NULL)
        {
                printf("can not find");
                exit(0);
        }
        r=p->next;
        p->next=r->next;
        free(r);
}
void PURGE(linklist *l)/**********************************消除表中多余结点********************************/
{
        linklist *p=l->next,*t;
linklist *q=NULL;
while(p!=NULL)
{
         q=p;
         while(q->next!=NULL)
         {
                 if(q->next->data!=p->data)
                         q=q->next;
                 else
                 {
                         t=q->next;
                         q->next=q->next->next;
                         free(t);
                 }
         }
         p=p->next;
}
}
linklist *change(linklist *l)//************************************************逆置单链表
{
        linklist *p=l->next,*s;
        l->next=NULL;
        while(p)
        {
                s=p;
                p=p->next;
                s->next=l->next;
                l->next=s;
               
        }
        return l;

}
void main()
{
        linklist *l,*n;
        int i;
        datatype x;
        l=creatlistf();
        /*************显示菜单**********/
        /***********用户选择并转入相应函数*********/
            printf("\n*===============================================================*\n");
                printf("\n*-------------------欢迎使用单链表管理系统----------------------*\n");
                printf("\n*         ★1.单链表的打印                                      *\n");
                printf("\n*         ★2.查找运算                                          *\n");
                printf("\n*         ★3.插入运算                                          *\n");
                printf("\n*         ★4.删除运算                                          *\n");
                printf("\n*         ★5.清除多余重复结点            ☆By:                 *\n");
                printf("\n*         ★6.测试链表长度                       ☆*******       *\n");
                printf("\n*         ★7.逆置带头结点的单链表                              *\n");
                printf("\n*         ★0.退出管理模式                       ☆201321012838 *\n");
                printf("\n*===============================================================*\n");
                do
                {
       
                printf("\n                     -------请选择服务种类-------                \n");
                scanf("%d",&i);
                switch(i)
                {
                case 1: trave(l);break;
                case 2:
                                printf("输入要查找的数据的位置:\n");
                                scanf("%d",&i);
                                GET(l,i);
                            break;
                case 3:
                                printf("输入要插入的数据和位置:\n");
                                scanf("%c%d",&x,&i);
                                INSERT(l,x,i);
                                printf("插入后的链表数据:\n");
                            trave(l);
                            break;
                case 4:
                                printf("输入要删除结点的位置:\n");
                                scanf("%d",&i);
                                DELETER(l,i);
                                printf("删除后的链表数据:\n");
                            trave(l);
                            break;
                case 5:
                                printf("清楚表中多余重复结点:\n");
                                PURGE(l);
                                trave(l);
                            break;
                case 6: LENGTH(l);break;
                case 7:
                            n=change(l);
                    printf("遍历逆置后的链表:\n");
                    trave(n);
                break;
                case 0: exit(0);
                default : break;
                }
        }while(1);
}


运行结果

运行结果
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

头像被屏蔽
发表于 2014-10-30 18:15:25 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-22 07:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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