| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 571 人关注过本帖
标题:[求助]链表的问题,急啊!
只看楼主 加入收藏
cl_zdl
Rank: 1
等 级:新手上路
威 望:1
帖 子:71
专家分:0
注 册:2006-10-11
收藏
 问题点数:0 回复次数:7 
[求助]链表的问题,急啊!

下面的代码,没有编译错误,但为什么输出乱码呢?大侠们帮我看一下,谢谢!
#include <iostream>
#include<cstring>
using namespace std;
class Node
{
public:
Node *next;
char Name[10];
char No[10];
class LinkedList;
public:
Node( char name[], char no[]):next(NULL)
{strcpy(Name,name);
strcpy(No,no);
}
};

class LinkedList
{
public :
Node *front,*rear;
int size ;

public:
LinkedList(){Node node("Í·½áµã","000");front=&node;rear=&node;size=1;}

void Add_rear(char name[],char no[])
{
Node node(name,no);
rear->next=&node;
rear=&node;
size++;
}
void Add_front(char name[],char no[])
{ Node node(name,no);
node.next=front->next;
front=&node;
size++;
}
void Add_at(int n,char name[],char no[])
{ Node *m_next;
m_next=front;
for(int i=0;i<n-1;i++)
m_next=m_next->next;
Node node(name,no);
node.next=m_next;
m_next=&node;
size++;
}
void delete_front()
{ Node *p;
p=front;
if(size==0)
{ cout<<"Á´±í¿Õ£¡"<<endl;
exit(1);
}
front=front->next;
size--;
delete p;
}
void delete_at(int n)
{
if(size==0)
{cout<<"Á´±í¿Õ !"<<endl;
exit(1);
}
Node *m_next;
m_next=front;
for(int i=0;i<n-1;i++)
m_next=m_next->next;
Node *p;
p=m_next;
m_next=m_next->next;
size--;
delete p;
}
void find(int index)
{ Node *m_front;
m_front=front;
if((index<0)||(index>size))
{cout<<"²»´æÔÚ´ËÊý¾Ý!"<<endl;
exit(1);
}
for(int i=1;i<index-1;i++)
m_front=m_front->next;
cout<<"ÐÕÃûÊÇ:"<<m_front->Name<<endl<<"µç»°ÊÇ:"<<m_front->No<<endl;
}
void find (char item[])
{ Node *m_next ;
m_next=front;
for(int i=0;i<=size;i++)
{
if(strcmp(m_next->Name,item)==0)
{ cout<<"ÄãÒªÕҵĵ绰ÊÇ:"<<m_next->No<<endl;
m_next=m_next->next;
}

}
}
};

void main()
{ int ch,exit=0;
char name[10],no[10];
LinkedList list ;

while (!exit)
{
cout<<"ÇëÑ¡Ôñ:1 Ìí¼Ó 2 ɾ³ý 3 ²éÕÒ 4 ÏÔʾËùÓеļǼ"<<endl;
cin>>ch;
switch(ch)
{
case 1:

cout<<"ÇëÑ¡ÔñÌí¼Ó·½Ê½: 1 ±íÍ·Ìí¼Ó 2±íβÌí¼Ó Ìض¨Î»ÖÃÌí¼Ó"<<endl;
int ch1;
cin>>ch1;
cout<<"ÇëÊäÈëÒªÌí¼ÓÈ˵ÄÐÕÃû:"<<endl;
cin>>name;
cout<<"ÇëÊäÈëÒªÌí¼ÓÈ˵ĵ绰£º"<<endl;
cin>>no;
switch(ch1)
{
case 1:
list.Add_front(name,no);
break;
case 2:
list.Add_rear(name,no);
break;
case 3:int m;
cout<<"ÇëÊäÈëÒªÌí¼ÓµÄλÖÃ:"<<endl;
cin>>m;
list.Add_at(m,name,no);
break;
}

break;
case 2:int ch2;
cout<<"ÇëÑ¡Ôñɾ³ýµÄ·½Ê½£º1 ±íͷɾ³ý 2 Ìض¨Î»ÖÃɾ³ý"<<endl;
cin>>ch2;
switch(ch2)
{
case 1: list.delete_front();
break;
case 2: int m;
cout<<"ÇëÊäÈëҪɾ³ýÊý¾ÝµÄλÖÃ"<<endl;
cin>>m;
list.delete_at(m);
break;
}
break;
case 3:int ch3;
cout<<"ÇëÑ¡ÔñÒª²éÕҵķ½Ê½: 1 ÐÕÃû²éÕÒ 2 Ìض¨Î»ÖòéÕÒ "<<endl;
cin>>ch3;
switch(ch3)
{ case 1: cout<<"ÇëÊäÈëÐÕÃû"<<endl;
cin>>name;
list.find(name);
break;
case 2: int m;
cout<<"ÇëÊäÈëÒª²éÕÒµÄÊý¾ÝµÄλÖÃ"<<endl;
cin>>m;
list.find(m);
break;
}
break;
case 4:Node *m_next;
m_next=list.front;
cout<<"ËùÓеļǼ:"<<endl;
for(int i=0;i<list.size;i++)
{cout<<m_next->Name<<endl<<m_next->No<<endl;
m_next=m_next->next;
}
break;
}
cout<<"Í˳öÇëÊäÈë:1£¬¼ÌÐøÇëÊäÈë:0"<<endl;
cin>>exit;
}
}

搜索更多相关主题的帖子: 链表 
2006-11-18 16:34
cl_zdl
Rank: 1
等 级:新手上路
威 望:1
帖 子:71
专家分:0
注 册:2006-10-11
收藏
得分:0 
上面的乱码是一些提示语句!
2006-11-18 16:36
maoguoqing
Rank: 6Rank: 6
来 自:重庆
等 级:贵宾
威 望:28
帖 子:2980
专家分:19
注 册:2005-12-5
收藏
得分:0 

看不懂你要做什么?把乱码改过来。。。


天行健,君子以自强不息!!QQ:68660681
2006-11-19 00:02
cl_zdl
Rank: 1
等 级:新手上路
威 望:1
帖 子:71
专家分:0
注 册:2006-10-11
收藏
得分:0 

#include <iostream>
#include<cstring>
using namespace std;
class Node
{
public:
Node *next;
char Name[10];
char No[10];
class LinkedList;
public:
Node( char name[], char no[]):next(0)
{strcpy(Name,name);
strcpy(No,no);
}
};

class LinkedList
{
public :
Node *front,*rear;
int size ;

public:
LinkedList(){Node node("头结点","000");front=&node;rear=&node;size=1;}

void Add_rear(char name[],char no[])
{
Node node(name,no);
rear->next=&node;
rear=&node;
size++;
}
void Add_front(char name[],char no[])
{ Node node(name,no);
node.next=front->next;
front=&node;
size++;
}
void Add_at(int n,char name[],char no[])
{ Node *m_next;
m_next=front;
for(int i=0;i<n-1;i++)
m_next=m_next->next;
Node node(name,no);
node.next=m_next;
m_next=&node;
size++;
}
void delete_front()
{
if(size==0)
{ cout<<"链表空"<<endl;
exit(1);
}
front=front->next;
size--;
}
void delete_at(int n)
{
if(size==0)
{cout<<"链表空!"<<endl;
exit(1);
}
Node *m_next;
m_next=front;
for(int i=0;i<n-1;i++)
m_next=m_next->next;

size--;
}
void find(int index)
{ Node *m_front;
m_front=front;
if((index<0)||(index>size))
{cout<<"结果不存在!"<<endl;
exit(1);
}
for(int i=1;i<index-1;i++)
m_front=m_front->next;
cout<<"你要查找的姓名是:"<<m_front->Name<<endl<<"电话是:"<<m_front->No<<endl;
}
void find (char item[])
{ Node *m_next ;
m_next=front;
for(int i=0;i<=size;i++)
{
if(strcmp(m_next->Name,item)==0)
{ cout<<"你要找的人的电话是:"<<m_next->No<<endl;
m_next=m_next->next;
}

}
}
};

void main()
{ int ch,exit=0;
char name[10],no[10];
LinkedList list ;

while (!exit)
{
cout<<"请选择:1 添加 2 删除 3 查找 4 显示数据"<<endl;
cin>>ch;
switch(ch)
{
case 1:

cout<<"请选择添加方式: 1 头结点添加 2 尾结点添加 3:特定位置添加"<<endl;
int ch1;
cin>>ch1;
cout<<"请输入姓名:"<<endl;
cin>>name;
cout<<"请输入电话"<<endl;
cin>>no;
switch(ch1)
{
case 1:
list.Add_front(name,no);
break;
case 2:
list.Add_rear(name,no);
break;
case 3:int m;
cout<<"请输入添加位置:"<<endl;
cin>>m;
list.Add_at(m,name,no);
break;
}

break;
case 2:int ch2;
cout<<"请输入删除方式 1表头删除 2 特定位置删除"<<endl;
cin>>ch2;
switch(ch2)
{
case 1: list.delete_front();
break;
case 2: int m;
cout<<"请输入删除的位置"<<endl;
cin>>m;
list.delete_at(m);
break;
}
break;
case 3:int ch3;
cout<<"请输入查找方式1 姓名查找 2 位置查找"<<endl;
cin>>ch3;
switch(ch3)
{ case 1: cout<<"请输入姓名"<<endl;
cin>>name;
list.find(name);
break;
case 2: int m;
cout<<"请输入要查找的位置"<<endl;
cin>>m;
list.find(m);
break;
}
break;
case 4:Node *m_next;
m_next=list.front;
cout<<"输出所有记录:"<<endl<<"第一条:";
for(int i=0;i<list.size;i++)
{cout<<m_next->Name<<endl<<m_next->No<<endl;
m_next=m_next->next;
cout<<"下一条:"

}
break;
}
cout<<"退出输入:1;继续输入:0。"<<endl;
cin>>exit;
}
}

2006-11-19 09:25
cl_zdl
Rank: 1
等 级:新手上路
威 望:1
帖 子:71
专家分:0
注 册:2006-10-11
收藏
得分:0 
版主帮我看看吧!着急啊!
2006-11-19 09:26
maoguoqing
Rank: 6Rank: 6
来 自:重庆
等 级:贵宾
威 望:28
帖 子:2980
专家分:19
注 册:2005-12-5
收藏
得分:0 

看你的添加那几个函数,就比如说你的Add_font()你的node 是局部对象,这个函数执行完后它的内存将被释放
就不存在了,,所以改成一下便可
Node* node= new Node(name,no);
node->next=front->next;
front=node;


天行健,君子以自强不息!!QQ:68660681
2006-11-19 12:23
cl_zdl
Rank: 1
等 级:新手上路
威 望:1
帖 子:71
专家分:0
注 册:2006-10-11
收藏
得分:0 


版主我还有个问题是:这里声明称Node *node=new Node(name,no);
在哪里用delete函数删除node的内存!
还是系统自己删除它呢?

2006-11-19 21:17
song4
Rank: 7Rank: 7Rank: 7
等 级:贵宾
威 望:38
帖 子:1533
专家分:4
注 册:2006-3-25
收藏
得分:0 
void delete_at(int n)
{
if(size==0)
{cout<<"链表空!"<<endl;
exit(1);
}
Node *m_next;
m_next=front;
for(int i=0;i<n-1;i++)
m_next=m_next->next;

size--;
}

这里
主函数退出是while(!=NULL) 调用一下

嵌入式 ARM 单片机 驱动 RT操作系统 J2ME LINUX  Symbian C C++ 数据结构 JAVA Oracle 设计模式 软件工程 JSP
2006-11-20 09:16
快速回复:[求助]链表的问题,急啊!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.041808 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved