双链表嵌套实现的几行数据的链表打印输出数据最后一行的数据覆盖前面的数据问题解决分析

本文分析了在使用双链表结构表示交易记录时遇到的数据覆盖问题。通过结构调整,将原本的`char *item`改为`char item[10]`或`string item`,解决了数据输出错误的问题,确保链表正确打印每一行的交易记录。
摘要由CSDN通过智能技术生成

  建立如下的链表,每一行可以理解为一条交易记录,后面的200,300,500可以理解为项记录。
  1,200,300,500
  2,600,700
  3,900,100
  程序中结构体是如下定义的:
  struct TransNode
  {
    int id;
    struct ItemNode *Inext;
    struct TransNode *next;
  };
  struct ItemNode
  {
    char *item;
    struct ItemNode *next;
  };
  用尾部追加结点建立交易链表,Inext指向加入项的链表。
  T_p=new TransNode;
  T_p->id=atoi(temp);
  ListInsertItem_Tail(LItem,buffer1); /尾部追加结点创建项的链表/
  T_p->Inext=LItem;
  T_p->next=NULL;
  T_r->next=T_p;
  T_r=T_p;
  但打印输出结果却是
  1,900,100,500
  2,900,100
  3,900,100
  看输出结果是最后的数据把前面的数据覆盖了,我一度怀疑是T_r=T_p这条语句的问题,也就是后面的Inext把前面的Inext给覆盖掉了。
  改为头部加入结点法问题还是这样。
  后来在网上看到一篇博客,作者的程序建立多个班多个学生的成绩链表,作者写道:在学生结构体里面有 char *name,用来增加学生的名字信息,可是遍历结构体的时候就出现段错误。感谢大佬指点了一下,加了名字的结构体代码如下:char name[10]。
  受此启发,我想到程序输出错误是不是我定义的char *item的问题,改为char item[10]后程序输出正确。
  1,200,300,500
  2,600,700
  3,900,100
  结构体定义中的char item[10];改成string item;也可以,代码只要把ListInsertItem_Tail函数中的strcpy(s->item,temp);改为s->item=temp; 就可以了。
  建立一个文本文件trans.txt
  1,200,300,500
  2,600,700
  3,900,100
  修改后的程序代码如下:

/*
*********************************************************************
*模块名称:   
*描述: 双链表嵌套实现的几行数据的链表的建立并打印输出
*编写日期:
*编写人: 
*错误报告:
*最后改动日期:
*********************************************************************
*/
#include  <iostream>
#include  <fstream>
#include  <cstring>
#include  <stdio.h>
#include  <stdlib.h>
using namespace std;
typedef struct ItemNode
{
   
	char item[10];   
	//此处原为char *item,因打印输出的时候最后的数据覆盖前面的,
	//看到网上得到启发,改为char item[10]
	ItemNode *next;
}*LinkListItem;
typedef struct TransNode 
{
    
	
  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值