Christopher. 发表于 2020-9-17 16:36:05

各位大佬帮忙看一下这个吧,我输出的第一个为啥是0

#include <conio.h>
#include <stdio.h>
#include <process.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>
struct Node{
                int data;
                Node *next;
                };

Node Head;       //头结点
Node *DLList;    //头指针
void init(Node *DLList);
void display(Node *DLList);
void insert(Node *DLList1,int,int);
void search(Node *DLList1,int);
void del(Node *DLList1,int);

int main()
{
        char choice;
        int wz,key;
    key=0;
        DLList=&Head;   //使头指针指向头结点
        Head.next=NULL;

        while (1)
        {
                system("cls");
   
                printf("\n\n\n\n");                           
                printf("\t\t            单链表操作\n");
                printf("\t\t======================================");
                printf("\n\n");
                printf("\t\t             1:初始化      \n");
                printf("\t\t             2:显示      \n");
                printf("\t\t             3:单个插入    \n");
                printf("\t\t             4:查找      \n");
                printf("\t\t             5:删除      \n");
                printf("\t\t             0:退出      \n");
                printf("\n");
                printf("\t\t请选择:" );

                choice = getch();
                system("cls");
               
                switch(choice)
                {
                        case '1':
                          //调用实现函数
                          init(DLList);
                                break;
                        case '2':
                          //调用实现函数
                          display(DLList);
                                break;
                        case '3':
                //位置wz,需插入的数key
                       
                                break;
                        case '4':
                                //请输入需要查找的数key
                          //调用实现函数
                                break;
                        case '5':
                                //请输入需要删除的数
                          //调用实现函数
                                break;
                        case '0':
                                exit(0);
                }
        }
        return 0;
}

//公用的等待函数
void wait()
{
        printf("\n\n请按任意键继续\n");
        getch();
}

void init(Node *DLList)
{
        int length;
        Node *p,*q;
        while (1)
        {
                printf("输入元素个数(0- 10000 ):\n");
                scanf("%d",&length);
                if (length >= 0 && length <= 10000)
                        break;
                printf("\n");
        }

    int i;
        while (1)
        {
                printf("输入随机数种子(0-32767):\n");
                scanf("%d",&i);
                if (i >= 0 && i <= 32767)
                        break;
                printf("\n");
        }

    //从线性表中删除并释放原有的结点,使其成为空表
        p=DLList;
        while (p->next!=NULL)
        {
                q=p->next;
                p->next=q->next;
                free(q);
        }

        srand(i);//指定随机数种子,相同的种子将产生相同的数据序列
        rand();

        //向线性表插入length个新结点
    for (int j=1;j<=length;j++)   
    {
                p=new Node;
                p->next=DLList->next;
                DLList->next=p;
                p->data=rand() % 10000;
    }
}

/2.在屏幕上依次显示以DLList1为头指针的线性表中的全部元素和元素个数
//格式应便于观察
void display(Node *DLList)
{
        Node *p;
        p=DLList;
       
        while(p)
        {
                printf("%d ",p->data);
                p=p->next;
        }
       
        wait();
}

xieglt 发表于 2020-9-17 16:58:09

本帖最后由 xieglt 于 2020-9-17 17:09 编辑

因为
DLList=&Head;
head 没有初始化,head是全局变量,被系统初始化为0了
又输出从head开始输出,所以第一个输出永远是0

另外,感觉删除链表和建立链表的代码逻辑似乎不是很清晰建议这样写

       //清空链表
        p = DLList->next;
      //链表非空时循环
        while(p != NULL)
        {
                //保存next节点
                q = p->next;
                //释放当前节点
                free(p);
               //当前节点 = next 节点
                p = q;
        }
   
    //建立链表,你的写法,新节点不是在链表尾部,而是在第二个位置。
    p = DLList;
    for (int j=1;j<=length;j++)   
    {         
                q=new Node;
                q->next=NULL;
                q->data=rand() % 10000;

                p->next = q;
                p = q;
    }

Christopher. 发表于 2020-9-17 17:31:07

xieglt 发表于 2020-9-17 16:58
因为
DLList=&Head;
head 没有初始化,head是全局变量,被系统初始化为0了


那我是不是在p=DLList后面加一个p=p->next就行了

xieglt 发表于 2020-9-17 17:53:52

Christopher. 发表于 2020-9-17 17:31
那我是不是在p=DLList后面加一个p=p->next就行了

是的

Christopher. 发表于 2020-9-17 17:55:47

xieglt 发表于 2020-9-17 17:53
是的

好的,谢谢啦
页: [1]
查看完整版本: 各位大佬帮忙看一下这个吧,我输出的第一个为啥是0