热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

一个简单的创建链表的代码!我一时有点想不明白了!请讲解!!!

structnumber{intnum;number*next;};number*head;voidmain(){number*ps;nu
struct number
{
int num;
number * next;
};

number * head;

void main()
{
number * ps;
number * end;
ps = new number;
head = new number;
cout<<"input your number!!  if you want to exit, input 0!!\n"<          cin>>ps->num;
head = NULL;
end = ps;

while(ps->num!=0)
{
if(head==NULL)
head = ps;
else

head->next = ps;
}  
end =ps;

cin>>ps->num;

}
end->next = NULL;
    delete ps;

    while(head)
{
cout head = head->next;
}
   


}

输入1
    2
    3
    0
运行结果:-56885459 ---并提示错误
请问1,怎样使它们能够顺序显示出来(1,2,3)

    2,怎样反序显示出来(3,2,1)

10 个解决方案

#1


该回复被版主删除

#2


struct number
{
int num;
number * next;
};

number * head;

void main()
{
number * ps;
number * end;
ps = new number;
cout<<"input your number!!  if you want to exit, input 0!!\n"<          cin>>ps->num;
head = NULL;
end = ps;

while(ps->num!=0)
{
if(head==NULL)
head = ps;
else

head->next = ps;
}  
end =ps;

ps = new number;
         cout<<"input your number!!  if you want to exit, input 0!!\n"<                   cin>>ps->num;

}
end->next = NULL;
    delete ps;

    while(head)
{
cout head = head->next;
}
   


}

#3


该回复被版主删除

#4


谁能给我个双链表的例子!
让我对照学习一下!
谢谢!!

#5


推荐学习stl

#6


#include "stdio.h"
#define listsize   100      /*线性表的最大长度为100*/
typedef  char  ElemType;
typedef struct
{ElemType  elem[listsize];
int  length;
}Sqlist;
int  ListDelete (Sqlist *L,int i)
{        int j;
         if(i<1 || i>L->length)
{ printf("Position error"); /*删除位置出错!*/
 return 0;     }
         for(j=i;j<=L->length-1;j++)
         L->elem[j-1]=L->elem[j];           /*数据元素前移*/
 L->length--;   return 1;   /*长度减1*/
      }
int  ListInsert (Sqlist* L,int i,ElemType x)
 {  int j;
     if(i<1 || i>L->length+1)
 { printf("Position error");   /*插入位置出错*/
  return 0 ;}
  if(L->length>=listsize)
          printf("overflow");/*表已满*/
     for(j=L->length-1;j>=i-1;j--)
     L->elem[j+1]=L->elem[j];    /*数据元素后移 */
     L->elem[i-1]=x;                  /*插入x */
     L->length++;                     /*长度加1 */
     return  1;
}

void InitSqlist(Sqlist* L)
{/*初始化线性表*/
 int i;
 printf("please input the length of list\nn="); /*输入线性表初始化时的长度*/
 scanf("%d",&L->length);
 printf("please input char from 1 to%d(char),example:abcdefg\n",L->length);
 getchar();
 for(i=0;ilength;i++) scanf("%c",&L->elem[i]); /*输入线性表的各元素*/
}

void print(Sqlist* v)          /*显示当前线性表所有元素*/
{int i;
 for(i=0;ilength;i++) printf("%c ",v->elem[i]);
 printf("\n");
}

int locate(Sqlist* v,char ch)
{/*在线性表中查找ch的位置,成功返回其位置,失败返回-1*/
 int i=0;
 while(ilength&&v->elem[i]!=ch) i++;  /*当前位置后移,直到找到为止*/
 if(v->elem[i]==ch)               /*找到当前元素*/
    return i;
 else  return(-1);
}

void main()
{
int n=0;
int loc,flag=1;
char j,ch;
int temp;
Sqlist L;
InitSqlist(&L);       /*初始化线性表*/
 while(flag)
    { printf("请选择:\n");
      printf("1->显示所有元素\n");
      printf("2->插入一个元素\n");
      printf("3->删除一个元素\n");
      printf("4->查找一个元素\n");
      printf("5->退出程序    \n");
      scanf("%c",&j);
      switch(j)
  {case '1':print(&L); break; /*显示所有元素*/

   case '2':{printf("请输入要插入的元素(一个字符)和插入位置:\n");
   printf("格式:字符,位置;例如:a,2\n");
   scanf(" %c,%d",&ch,&loc);  /*输入要插入的元素和插入的位置*/
   temp=ListInsert(&L,loc,ch);     /*插入*/
   if(temp==0)  printf("插入失败!\n");  /*插入失败*/
   else  {printf("插入成功!\n");   print(&L);} /*插入成功*/
   break;   }
    case '3':{printf("请输入要删除元素的位置:");
   scanf("%d",&loc);    /*输入要删除的元素的位置*/
   temp=ListDelete(&L,loc);  /*删除*/
   if(temp==1) printf("删除元素删除成功\n"); /*删除成功*/
   else printf("该元素不存在!\n");  /*删除失败*/
   print(&L);
   break;   }
    case '4':{printf("请输入要查找的元素:");
   scanf(" %c",&ch);      /*输入要查找的元素*/
   loc=locate(&L,ch);      /*定位*/
   if(loc!=-1) printf("该元素所在位置:%d\n",loc+1); /*显示该元素位置*/
   else    printf("%c 不存在!\n",ch);/*当前元素不存在*/
   break;   }
    default:flag=0;//printf("程序结束,按任意键退出!\n");
  }
 }
 //getchar();
}

#7


struct number
{
int num;
number * next;
};

number * head;

void main()
{
number * ps;
number * end;
ps = new number;
cout<<"input your number!!  if you want to exit, input 0!!\n"<          cin>>ps->num;
//head = NULL;
//end = ps;
end = NULL;//different
head = ps;//different
while(ps->num!=0)
{
//if(head==NULL)
// head = ps;
//else
//{ 
// head->next = ps;
//}
end->next = ps;//different  
end =ps;

ps = new number;
         cout<<"input your number!!  if you want to exit, input 0!!\n"<                   cin>>ps->num;

}
end->next = NULL;
    delete ps;

    while(head)
{
cout head = head->next;
}
   


}

我把  yxzbbc(口 水) 修改了一下。

#8


楼主的最大问题就是没有再循环中动态申请内存,循环外又把唯一的一块内存给Delete掉。
实现双向链表需要把结构体改成
struct number
{
int num;
number * next;
number * prior;
};
循环中需要
ps->prior = end;
end = ps;
循环外
end->next = head;

#9


该回复被版主删除

#10


该回复被版主删除

推荐阅读
  • 本文详细介绍了Spring的JdbcTemplate的使用方法,包括执行存储过程、存储函数的call()方法,执行任何SQL语句的execute()方法,单个更新和批量更新的update()和batchUpdate()方法,以及单查和列表查询的query()和queryForXXX()方法。提供了经过测试的API供使用。 ... [详细]
  • MyBatis多表查询与动态SQL使用
    本文介绍了MyBatis多表查询与动态SQL的使用方法,包括一对一查询和一对多查询。同时还介绍了动态SQL的使用,包括if标签、trim标签、where标签、set标签和foreach标签的用法。文章还提供了相关的配置信息和示例代码。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • CSS3选择器的使用方法详解,提高Web开发效率和精准度
    本文详细介绍了CSS3新增的选择器方法,包括属性选择器的使用。通过CSS3选择器,可以提高Web开发的效率和精准度,使得查找元素更加方便和快捷。同时,本文还对属性选择器的各种用法进行了详细解释,并给出了相应的代码示例。通过学习本文,读者可以更好地掌握CSS3选择器的使用方法,提升自己的Web开发能力。 ... [详细]
  • Java容器中的compareto方法排序原理解析
    本文从源码解析Java容器中的compareto方法的排序原理,讲解了在使用数组存储数据时的限制以及存储效率的问题。同时提到了Redis的五大数据结构和list、set等知识点,回忆了作者大学时代的Java学习经历。文章以作者做的思维导图作为目录,展示了整个讲解过程。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • JavaSE笔试题-接口、抽象类、多态等问题解答
    本文解答了JavaSE笔试题中关于接口、抽象类、多态等问题。包括Math类的取整数方法、接口是否可继承、抽象类是否可实现接口、抽象类是否可继承具体类、抽象类中是否可以有静态main方法等问题。同时介绍了面向对象的特征,以及Java中实现多态的机制。 ... [详细]
  • 本文讨论了一个关于cuowu类的问题,作者在使用cuowu类时遇到了错误提示和使用AdjustmentListener的问题。文章提供了16个解决方案,并给出了两个可能导致错误的原因。 ... [详细]
  • web.py开发web 第八章 Formalchemy 服务端验证方法
    本文介绍了在web.py开发中使用Formalchemy进行服务端表单数据验证的方法。以User表单为例,详细说明了对各字段的验证要求,包括必填、长度限制、唯一性等。同时介绍了如何自定义验证方法来实现验证唯一性和两个密码是否相等的功能。该文提供了相关代码示例。 ... [详细]
  • IjustinheritedsomewebpageswhichusesMooTools.IneverusedMooTools.NowIneedtoaddsomef ... [详细]
  • 添加环境光使正方体显示更真实
    本文介绍了如何给正方体添加环境光以使其显示更真实。通过在代码中加入环境光的计算,可以让物体的背光部分不再完全黑色,从而增加物体的真实感。代码中使用了顶点属性、光照颜色、光照方向、环境光等参数来计算物体的漫反射,并将计算结果与顶点颜色相乘得到最终的颜色。通过调整环境光的参数,可以达到不同的光照效果。 ... [详细]
  • Java学习笔记之使用反射+泛型构建通用DAO
    本文介绍了使用反射和泛型构建通用DAO的方法,通过减少代码冗余度来提高开发效率。通过示例说明了如何使用反射和泛型来实现对不同表的相同操作,从而避免重复编写相似的代码。该方法可以在Java学习中起到较大的帮助作用。 ... [详细]
  • 重入锁(ReentrantLock)学习及实现原理
    本文介绍了重入锁(ReentrantLock)的学习及实现原理。在学习synchronized的基础上,重入锁提供了更多的灵活性和功能。文章详细介绍了重入锁的特性、使用方法和实现原理,并提供了类图和测试代码供读者参考。重入锁支持重入和公平与非公平两种实现方式,通过对比和分析,读者可以更好地理解和应用重入锁。 ... [详细]
  • 本文介绍了解决Facebook脸书面试题中插入区间的方法,通过模拟遍历的方式判断当前元素与要插入元素的关系,找到插入点并将新区间插入。同时对算法的时间复杂度和空间复杂度进行了分析。 ... [详细]
  • 合并列值-合并为一列问题需求:createtabletab(Aint,Bint,Cint)inserttabselect1,2,3unionallsel ... [详细]
author-avatar
粉雪琪的天涯
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有