单链表-c语言单向链表的问题???

问题描述

c语言单向链表的问题???
 #include<stdio.h>#include<stdlib.h>struct node{    int num;    struct node *next;};//构建空的链表struct node* InitList(struct node *L){    L = (struct node*)malloc(sizeof(struct node));    L = NULL;    printf_s(""InitList sucess!"");    return L;}//创建单链表struct node* CreateList(struct node *Lint n){    struct node *temp*p;    L = (struct node*)malloc(sizeof(struct node));    L->next = NULL;    temp=L;    for (int i = 0; i < n; i++){        p = (struct node*)malloc(sizeof(struct node));        scanf_s(""%d"" &p->num);        temp->next = p;        temp = p;    }    temp->next = NULL;    return L;}void PrintList(struct node *L){    struct node *temp = L;    while (temp != NULL){        printf_s(""%d"" temp->num);        temp = temp->next;    }}void PrintMenu(){    printf_s(""------Menu------
"");    printf_s(""0  InitList
"");    printf_s(""1  CreateList
"");    printf_s(""2  PrintList
"");}void main(){    int nc;    struct node *La;    PrintMenu();    printf_s(""Enter the command: "");    scanf_s(""%d"" &c);    switch (c){    case 0:        La = InitList(La);        break;    case 1:        printf_s(""Enter the number of LinkList: "");        scanf_s(""%d"" &n);        La = CreateList(La n);        break;    case 2:        PrintList(La);        break;    default:        printf_s(""ERROREnter again: "");        break;    }    system(""pause"");}

为什么主函数case 0 的La = InitList(La); 这句报错: error C4700: uninitialized local variable 'La' used。 ????

解决方案

完善了一下,头结点没存数,print时要从第二个开始:

 #include<stdio.h>#include<stdlib.h>struct node{    int num;    struct node *next;};//构建空的链表void InitList(struct node *&L){//修改    L = (struct node*)malloc(sizeof(struct node));    L->next = NULL;    L->num=0;    printf_s(""InitList sucess!"");}//创建单链表void CreateList(struct node *&Lint n){//修改    struct node *temp*p;    L = (struct node*)malloc(sizeof(struct node));    L->next = NULL;    L->num=0;    temp=L;    for (int i = 0; i < n; i++){        p = (struct node*)malloc(sizeof(struct node));        scanf_s(""%d"" &p->num);        temp->next = p;        temp = p;    }    temp->next = NULL;}void PrintList(struct node *L){    struct node *temp = L->next;//修改,头结点不使用    while (temp != NULL){        printf(""%d"" temp->num);        temp = temp->next;    }}void PrintMenu(){    printf_s(""------Menu------
"");    printf_s(""0  InitList
"");    printf_s(""1  CreateList
"");    printf_s(""2  PrintList
"");}void main(){    int nc;    struct node *La;    c=1;    while(c>=0)    {        PrintMenu();        printf_s(""Enter the command: "");        scanf_s(""%d"" &c);        switch (c){        case 0:            InitList(La);            break;        case 1:            printf_s(""Enter the number of LinkList: "");            scanf_s(""%d"" &n);            CreateList(La n);            break;        case 2:            PrintList(La);            break;        default:            printf_s(""ERROREnter again: "");            break;        }    }    struct node *te;//增加释放空间    if(La)    {        te=La->next;        free(La);        La=te;    }    system(""pause"");}

解决方案二:
struct node *La;
->
struct node *La = (node *)malloc(sizeof(node));

解决方案三:
C语言之单向链表
C语言实现链表之单向链表(十五)测试用例
C语言单向循环链表解决约瑟夫问题

解决方案四:
可以用引用。给你改了一部分,自己再完善吧,还需要free

 #include<stdio.h>#include<stdlib.h>struct node{    int num;    struct node *next;};//构建空的链表void InitList(struct node *&L){//修改    L = (struct node*)malloc(sizeof(struct node));    L = NULL;    printf_s(""InitList sucess!"");}//创建单链表void CreateList(struct node *&Lint n){//修改    struct node *temp*p;    L = (struct node*)malloc(sizeof(struct node));    L->next = NULL;    temp=L;    for (int i = 0; i < n; i++){        p = (struct node*)malloc(sizeof(struct node));        scanf_s(""%d"" &p->num);        temp->next = p;        temp = p;    }    temp->next = NULL;}void PrintList(struct node *L){    struct node *temp = L;    while (temp != NULL){        printf_s(""%d"" temp->num);        temp = temp->next;    }}void PrintMenu(){    printf_s(""------Menu------
"");    printf_s(""0  InitList
"");    printf_s(""1  CreateList
"");    printf_s(""2  PrintList
"");}void main(){    int nc;    struct node *La;    c=1;    while(c>=0)    {        PrintMenu();        printf_s(""Enter the command: "");        scanf_s(""%d"" &c);        switch (c){        case 0:            InitList(La);//修改            break;        case 1:            printf_s(""Enter the number of LinkList: "");            scanf_s(""%d"" &n);            CreateList(La n);//修改            break;        case 2:            PrintList(La);            break;        default:            printf_s(""ERROREnter again: "");            break;        }    }    system(""pause"");}
时间: 2024-10-08 12:19:49

单链表-c语言单向链表的问题???的相关文章

C语言单向链表的表示与实现实例详解_C 语言

1.概述: C语言中的单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始. 链表中最简单的一种是单向链表,它包含两个域,一个信息域和一个指针域.这个链接指向列表中的下一个节点,而最后一个节点则指向一个空值. 如下图所示: 一个单向链表包含两个值: 当前节点的值和一个指向下一个节点的链接 一个单向链表的节点被分成两个部分.第一个部分保存或者显示关于节点的信息,第二个部分存储下一个节点的地址.单向链表只可向一个方向遍历. 链表最基本的结构是在每个节点

一个c语言单向链表,编译通过,运行结果却不知所谓,请求帮助

问题描述 一个c语言单向链表,编译通过,运行结果却不知所谓,请求帮助 这段代码在rhel6中用gcc编译通过,运行结果未定义,其中作的链表按number大小排序打印出来是没有排过序的结果,而且输入记录多了,其中某些项的number打印出来会由输入的值变成0或者一个莫名其妙的整数. vs2008中编译通过,打入多项记录只能显示2条,而且前一条是乱码. 最简单的一个数据结构,却忙了半天还查不出原因,帮个忙吧-_-||| 原代码: /*简单单向链表,输入学生名称和号码,按号码排序, 如果号码相同则记录

单链表-寻找一个单向链表的中项 java 调用问题!谢谢大家

问题描述 寻找一个单向链表的中项 java 调用问题!谢谢大家 //寻找一个单向链表的中项,如果存在两个则返回前一个,给出算法描述,并实现 package pra_bd; import java.awt.DisplayMode; import javax.naming.spi.DirStateFactory.Result; import org.w3c.dom.Node; public class LinkList { //头结点 Link first; //单链表构造函数 public Lin

c 数据结构 静态链表-C语言静态链表问题,vc下为什么会编译不通过呢?

问题描述 C语言静态链表问题,vc下为什么会编译不通过呢? #include #include #include #define NULL 0 #define Maxsize 100 typedef int elemtype,status; typedef struct { int cur; elemtype data; }component,SLinkList[Maxsize];/*SLinkList是一个结构体数组*/ void Initspace_SL(SLinkList &space)/

C语言之单向链表详解及实例代码_C 语言

1,单向链简洁. 单向链表(单链表)是链表的一种,其特点是链表的链接方向是单向的,对链表的访问要通过顺序读取从头部开始:链表是使用指针进行构造的列表:又称为结点列表,因为链表是由一个个结点组装起来的:其中每个结点都有指针成员变量指列表中的下一个结点:列表是由结点构成,由head指针指向第一个成为表头的结点而终止于最后一个指向nuLL的指针: 2,例子要求: 根据示例代码中的例子,完成单向链表(single linked list)中的以字符串为数据的链表的插入.删除以及查找,并支持单向链表的反转

C语言解字符串逆序和单向链表逆序问题的代码示例_C 语言

字符串逆序上次面试碰到一个单向链表逆序的题目,幸好对字符串逆序比较熟悉,类比做出来了.字符串逆序比较简单,直接上代码: void stringReverse(char* p1,char* p2) { if(p1==p2)return; //swap the value of p1 ,p2 *p1=(*p1)+(*p2); *p2=(*p1)-(*p2); *p1=(*p1)-(*p2); if(p1==p2-1)return; else stringReverse(++p1,--p2); } 调

单向链表的翻转

单向链表翻转,之前把这个问题想的太简单了,以为只要把数据域翻转过来就可以了,结果是筐了大瓢,下面举一个简单的例子说明: 假设有n个人站成一排,现在要把这n个人的站的顺序颠倒过来,那么就不能只把这n个人的身高颠倒过来,而是要把每一个人的位置颠倒过来,第一个人站到最后,第二个人站倒数第二,以此类推. 为了检验程序的正确性,这一次我们打印时不能再打印结点数据,而要打印结点.Java程序运行时,JVM为程序开辟了内存空间,每一个结点在栈中都有一个保存的位置,要注意的是,每次程序运行时某一个结点在内存中保

C语言静态链表和动态链表_C 语言

1. 静态链表 结构体中的成员可以是各种类型的指针变量,当一个结构体中有一个或多个成员的基类型是本结构体类型时,则称这种结构体为"引用自身的结构体".如: struct link { char ch; struct link *p; } a; p是一个可以指向 struct link 类型变量的指针成员.因此,a.p = &a 是合法的表达式,由此构成的存储结构如图1所示. 图1 引用自身的结构体 例1 一个简单的链表 #include <stdio.h> stru

C语言实现一个简单的单向链表list

用C语言实现一个简单实用的单向链表list,具有一定的实际意义.尤其我们不想使用STL里面的list<...>类的时候.我实现的这个list,结点存储任何调用者分配的任意类型的数据(void*).这个list适用于一些简单的场合,消耗极少的资源. 头文件: /* * list.h * Generic sequential linked list node structure -- can hold any type data. * cheungmine * Sep. 22, 2007. All