找回密码
 注册
搜索
热搜: 回贴
  • 前程无忧官网首页 有什么好的平台可以
  • 最新的销售平台 互联网营销的平台有哪
  • 制作网页的基本流程 网页制作和网页设
  • 【帝国CMS】输出带序号的列表(数字排
  • 网站建设公司 三一,中联,极东泵车的
  • 织梦 建站 织梦网站模版后台怎么更改
  • 云服务官网 哪些网站有免费的简历模板
  • 如何建网站要什么条件 建网站要用什么
  • 吉林市移动公司电话 吉林省退休人员网
  • 设计类毕业论文 网站设计与实现毕业论
查看: 309|回复: 7

[求助]链表的问题,急啊!

[复制链接]
发表于 2009-11-4 01:15:08 | 显示全部楼层 |阅读模式 IP:江苏扬州
下面的代码,没有编译错误,但为什么输出乱码呢?大侠们帮我看一下,谢谢!
#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<<"2?′??ú′?êy?Y!"<<endl;
exit(1);
}
for(int i=1;i<index-1;i++)
m_front=m_front->next;
cout<<"D???ê?:"<<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<<"??òa?òμ?μ??°ê?:"<<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 é?3y 3 2é?ò 4 ??ê??ùóDμ?????"<<endl;
cin>>ch;
switch(ch)
{
case 1:

cout<<"??????ìí?ó·?ê?: 1 ±íí·ìí?ó 2±í?2ìí?ó ì??¨????ìí?ó"<<endl;
int ch1;
cin>>ch1;
cout<<"??ê?è?òaìí?óè?μ?D???:"<<endl;
cin>>name;
cout<<"??ê?è?òaìí?óè?μ?μ??°£o"<<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<<"??ê?è?òaìí?óμ?????:"<<endl;
cin>>m;
list.Add_at(m,name,no);
break;
}

break;
case 2:int ch2;
cout<<"??????é?3yμ?·?ê?£o1 ±íí·é?3y 2 ì??¨????é?3y"<<endl;
cin>>ch2;
switch(ch2)
{
case 1: list.delete_front();
break;
case 2: int m;
cout<<"??ê?è?òaé?3yêy?Yμ?????"<<endl;
cin>>m;
list.delete_at(m);
break;
}
break;
case 3:int ch3;
cout<<"??????òa2é?òμ?·?ê?: 1 D???2é?ò 2 ì??¨????2é?ò "<<endl;
cin>>ch3;
switch(ch3)
{ case 1: cout<<"??ê?è?D???"<<endl;
cin>>name;
list.find(name);
break;
case 2: int m;
cout<<"??ê?è?òa2é?òμ?êy?Yμ?????"<<endl;
cin>>m;
list.find(m);
break;
}
break;
case 4:Node *m_next;
m_next=list.front;
cout<<"?ùóDμ?????:"<<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<<"í?3???ê?è?:1£??ìD???ê?è?:0"<<endl;
cin>>exit;
}
}
发表于 2009-11-4 01:15:10 | 显示全部楼层 IP:江苏扬州
上面的乱码是一些提示语句!
回复

使用道具 举报

发表于 2009-11-4 01:15:11 | 显示全部楼层 IP:江苏扬州
看不懂你要做什么?把乱码改过来。。。
回复

使用道具 举报

发表于 2009-11-4 01:15:12 | 显示全部楼层 IP:江苏扬州
#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;
}
}
回复

使用道具 举报

发表于 2009-11-4 01:15:14 | 显示全部楼层 IP:江苏扬州
版主帮我看看吧!着急啊!
回复

使用道具 举报

发表于 2009-11-4 01:15:15 | 显示全部楼层 IP:江苏扬州
看你的添加那几个函数,就比如说你的Add_font()你的node 是局部对象,这个函数执行完后它的内存将被释放
就不存在了,,所以改成一下便可
Node* node= new Node(name,no);
node->next=front->next;
front=node;
回复

使用道具 举报

发表于 2009-11-4 01:15:16 | 显示全部楼层 IP:江苏扬州
版主我还有个问题是:这里声明称Node *node=new Node(name,no);
在哪里用delete函数删除node的内存!
还是系统自己删除它呢?
回复

使用道具 举报

发表于 2009-11-4 01:15:17 | 显示全部楼层 IP:江苏扬州
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) 调用一下
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|最新主题|手机版|微赢网络技术论坛 ( 苏ICP备08020429号 )

GMT+8, 2024-10-1 01:21 , Processed in 0.331881 second(s), 13 queries , Gzip On, MemCache On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表