单链表-数据结构 链表的创建 不知道怎么改

问题描述

数据结构 链表的创建 不知道怎么改

#include
#include
#include

typedef struct Node //创建新的数据类型
{
int data; //数据域
struct Node * pNext; //指针域
}NODE, *PNODE; //NODE等价与struct Node //PNODE等价于struct Node *

//函数声明
PNODE create_list();
void traverse_list(NODE pHead);

int main()
{
PNODE pHead = NULL;

pHead = create_list(); //create_lsit()功能:创建一个非循环单链表,并将该链表的头结点的地址付给pHead
traverse_list(pHead);

return 0;

}

PNODE create_list()
{
int len; //用来存放有效节点的个数
int i;
int val; //用来临时存放用户输入的结点的值

PNODE pHead = (PNODE)malloc(sizeof(NODE));
pHead->pNext = NULL;
if (NULL == pHead)
{
    printf("内存分配失败,程序终止!");
    exit(-1);
}

printf("请输入您需要生成的链表节点个数:len = ");
scanf("%d", &len);

for (i=0; i<len; i++)
{
    printf("请输入第%d个结点的数据:", i+1);
    scanf("%d", &val);

    PNODE pNew = (PNODE)malloc(sizeof(NODE));
    if (NULL == pHead)
    {
        printf("内存分配失败,程序终止!");
        exit(-1);
    }

    pNew->data = val;
    pNew->pNext = pHead->pNext;
    pHead->pNext = pNew;
}

return pHead;

}

void traverse_list(PNODE pHead)
{
PNODE p = pHead->pNext;

while(p)
{
    printf("%d ", p->data);
    p = p->pNext;
}

}


G:编程数据结构源代码List.cpp(20) : error C2664: 'traverse_list' : cannot convert parameter 1 from 'struct Node *' to 'struct Node'

解决方案

问题出在你的函数声明:
void traverse_list(NODE pHead);

而你的函数定义为:
void traverse_list(PNODE pHead);

由于声明在main前,定义在main函数之后,所以main中调用的时候是根据你的声明调用。注意你声明的是NODE pHead,而你传参为PNODE,所以报错

解决方案二:

将函数声明部分的void traverse_list(NODE pHead)改为void traverse_list(PNODE pHead);

解决方案三:

from 'struct Node *' to 'struct Node'
说明是类型不匹配引起的,从指针到结构体变量,可以在指针变量前使用 & 来解决此问题

时间: 2024-10-01 16:46:19

单链表-数据结构 链表的创建 不知道怎么改的相关文章

c语言 链表-数据结构链表创建出错

问题描述 数据结构链表创建出错 麻烦大家帮我看看哪里出错了,十分感谢啊 #include "stdio.h" #include "malloc.h" #include "stdlib.h" #define NULL 0 #define OK 1 typedef int ElemType; typedef int Status; typedef struct LNode{ ElemType data; struct LNode *next; }LN

C语言创建和操作单链表数据结构的实例教程_C 语言

1,为什么要用到链表 数组作为存放同类数据的集合,给我们在程序设计时带来很多的方便,增加了灵活性.但数组也同样存在一些弊病.如数组的大小在定义时要事先规定,不能在程序中进行调整,这样一来,在程序设计中针对不同问题有时需要3 0个大小的数组,有时需要5 0个数组的大小,难于统一.我们只能够根据可能的最大需求来定义数组,常常会造成一定存储空间的浪费. 我们希望构造动态的数组,随时可以调整数组的大小,以满足不同问题的需要.链表就是我们需要的动态数组.它是在程序的执行过程中根据需要有数据存储就向系统要求

浅谈PHP链表数据结构(单链表)_php实例

链表:是一个有序的列表,但是它在内存中是分散存储的,使用链表可以解决类似约瑟夫问题,排序问题,搜索问题,广义表 单向链表,双向链表,环形链表 PHP的底层是C,当一个程序运行时,内存分成五个区(堆区,栈区,全局区,常量区,代码区) 规定:基本数据类型,一般放在栈区 复合数据类型,比如对象,放在堆区 定义一个类Hero 定义成员属性排名 $no 定义成员属性姓名 $name 定义成员属性昵称 $nickname 定义成员属性 $next,是一个引用,指向下一个Hero对象 定义构造函数,传递参数:

关于单链表的结点的创建问题

问题描述 关于单链表的结点的创建问题 struct stu{ char sex; int age; struct stu next;};struct stu *p;struct stu *ptr;struct stu *head; void main(){ head=(struct stu)malloc(sizeof(struct stu)); head->age=12; ptr=head; for (int i=1; i printf(""请输入数据: ""

Java模拟单链表和双端链表数据结构的实例讲解_java

模拟单链表 线性表: 线性表(亦作顺序表)是最基本.最简单.也是最常用的一种数据结构. 线性表中数据元素之间的关系是一对一的关系,即除了第一个和最后一个数据元素之外,其它数据元素都是首尾相接的. 线性表的逻辑结构简单,便于实现和操作. 在实际应用中,线性表都是以栈.队列.字符串等特殊线性表的形式来使用的. 线性结构的基本特征为: 1.集合中必存在唯一的一个"第一元素": 2.集合中必存在唯一的一个 "最后元素" : 3.除最后一个元素之外,均有 唯一的后继(后件):

单链表-删除链表的节点出现问题

问题描述 删除链表的节点出现问题 我创建了一个链表,链表的第一个节点不是空白的.我想用free函数删除第一个节点,发现出错.删除其他的节点没有问题.不知道什么缘故. 解决方案 你的链表怎么定义的? 是 typeof struct Node { Node next; } Node * head这样定义的么? 那么你删除首节点要这么做 prehead = head; head = head->next; free(prehead); 解决方案二: 删除节点时: Node *s,*p; s=p->n

泛型思想理解数据结构链表

前言 1. 本文用到一个很重要的思想--泛型编程思想:不熟悉泛型的话,请自行搜索相关资料学习(void *,如memcpy,memmove,qsort,memset等库函数均使用到了泛型思想) . 2. 本文最后会提供一个demo程序附件,该demo程序以c99标准进行编写的,在Linux-gcc下调试通过,vc6下可能会有错误. 3. 本文图示中,红色实线表示要添加的地方,黑色虚线表示要断开的地方,黑色实线保持原样. 4. 本文链表设计为最简单的非循环单链表. 数组与链表比较 数组 链表 优点

c语言-线性链表数据结构的插入与删除

问题描述 线性链表数据结构的插入与删除 在你自己的文件下,建立一个C语言程序SL.C,完成下列要求: 1. 定义长度为10的数组,输入9个数据(1,3,4,5,7,9,12,20,28),然后输出这九个数组元素的存储单元地址和相应的数值: 2. 建立一个数组元素的插入函数,能够按照数据从小到大的次序自动找到插入位置完成插入元素的操作,调用此函数插入数据15,然后输出数值元素的存储单元地址和相应的数值: 3. 建立一个数组元素的删除函数,能够按照数据自动删除指定元素的操作,调用此函数删除数据值为9

Java 数据结构链表操作实现代码_java

 链表是一种复杂的数据结构,其数据之间的相互关系使链表分成三种:单链表.循环链表.双向链表,下面将逐一介绍.链表在数据结构中是基础,也是重要的知识点,这里讲下Java 中链表的实现, JAVA 链表操作:单链表和双链表 主要讲述几点: 一.链表的简介 二.链表实现原理和必要性 三.单链表示例 四.双链表示例 一.链表的简介 链表是一种比较常用的数据结构,链表虽然保存比较复杂,但是在查询时候比较便捷,在多种计算机语言都相应的应用,链表有多种类别,文章针对单链表和双链表进行分析.链表中数据就像被一个