vc++编译c语言链表 插入后显示出问题。

[复制链接]
查看11 | 回复2 | 2011-6-18 09:33:55 | 显示全部楼层 |阅读模式
代码:
#include
#include
typedef char DataType;
typedef struct node* LinkList;
typedef struct node{
        DataType data;
        LinkList next;
}ListNode;
LinkList head;
ListNode first;
/************************创建链表**************/
void CreateList()
{
        DataType ch;
        LinkList s,r;
        r = head;
        ch = getchar();
        while(ch != '\n')
        {
                s = (LinkList)malloc(sizeof(ListNode));
                s->data = ch;
                r->next = s;
                r = s;
                ch = getchar();
        }
        r->next = NULL;
}
/*************************显示链表**********************/
void DisplayList()
{
        LinkList r;
        r = head->next;
        while(r->next != NULL)
        {
                printf("%c->",r->data);
                r = r->next;
        }
        printf("%c->",r->data);
}
////////////////////////////////////////////////////////////
/************************插入链表****************************/
void InsertList(DataType ch, int locate)
{
        int i = 0;
        LinkList p = head;
        LinkList s;
        while(inext != NULL)
        {
                p = p->next;
                i++;
        }
        if(i != locate-1)
        {
                printf("插入位子错误\n");
                return;
        }
        s = (LinkList)malloc(sizeof(ListNode));
        s->data = ch;
        s->next = p->next;
        p->next = s;
}
void main()
{
        int select,locate;
        DataType ch;
        head = &first;
        head->next = NULL;
        printf("请输入数据\n");
        CreateList();
        while(1)
        {
                printf("\n\n============Main Menu=============\n");
                printf("
1.InsertList
2.DeleteList\n");
                printf("
3.GetNode(i)
4.GetNode(x)\n");
                printf("
5.Length
6.Display\n");
                printf("
7.exit\n");
                printf("==================================\n");
                scanf("%d",&select);
                switch(select)
                {
                case 1:
                        printf("请输入要插的数据\n");
                        scanf("%c",&ch);
                        getchar();
                        printf("请输入位子\n");
                        scanf("%d",&locate);
                        getchar();
                        InsertList(ch,locate);
                        break;
                case 6:
                        DisplayList();
                        getchar();
                        break;
                case 7:
                        exit(0);
                        break;
                }
                getchar();
        }
}
插入后显示链表出问题。找了半天也不知道哪里出错

回复

使用道具 举报

千问 | 2011-6-18 09:33:55 | 显示全部楼层
程序写的让人不堪入目....至于全局变量的滥用就不说了,C语言的指针是一个灵活的东西,当然太灵活的也就没有很好的约束,容易失去控制.所以C语言的指针使用是具有两面的性的。C语言的变量的使用: 1.声明变量 2.变量初始化(也可说是赋值) *对于指针更要注意,使用指针前,要确保指针是一个合法的指针,像上面的 全局指针head就是一个野指针,也就是说没有初始化,没有明确的指向。...
回复

使用道具 举报

千问 | 2011-6-18 09:33:55 | 显示全部楼层
void CreateList(){DataType ch;LinkList s,r;r = head;ch = getchar();while(ch != '\n'){s = (LinkList)malloc(sizeof(ListNode));s->data = ch;r->next = s;r = s;...
回复

使用道具 举报

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

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行