设为首页  加入收藏  联系我们 繁體中文  

黑客软件:

  漏洞扫描 | 木马间谍 | 加密解密 | 远程控制 | 破坏攻击 | 杀毒软件 | 防火墙类 | OICQ专区 | 黑客必备 | 常用工具 | 网吧攻击
文章中心:   最新资讯 | 黑客技术 | 电脑基础 | 菜鸟文摘 | 网络安全 | 网络技巧 | QQ技巧 | OQ空间代码 | 免费资源 | 编程世界 | 建站技术
素材源码:   论坛相关 | ASP源码 | CGI 源码 | NET 源码 | PHP 源码 | 酷站素材 | 字体素材 | 图片素材 | 友情发布 | 网页模版 | 建站软件
教程动画:   黑客教程 | 黑客编程 | 网站入侵 | 菜鸟教程 | 入侵教程 | 破解教程 | 电子书籍 | 网页制作 | 高级会员 | 综合教程 | 本站原创


   

  您当前的位置:中华隐士黑客联盟 -> 编程世界 -> VCC文章 -> 文章内容 [站内搜索]  

 
c/c++中结构体(struct)知识点强化,链表的学习
作者:不详  来源:转载  发布时间:2006-11-19 20:47:28  发布人:heigeheapao
最后我学习一下如何在已有的链表上插入节点

我们要考虑四中情况,

1.链表为空!

2.插入点在首节点前

3.插入点找不到的情况我们设置放在最后!

4.插入点在中间的情况!

今天的程序在昨天的基础上做了进一步的修改,可以避免删除点找不到的情况,如果找不到删除点就退出函数!

代码入下:重点部分我有了详细的注解,插入函数名为insterl()


//程序作者:管宁
//站点:www.cndev-lab.com
//所有稿件均有版权,如要转载,请务必著名出处和作者

#include <iostream>
using namespace std;
struct test
{
int number;
float socre;
test *next;
};
test *head;//创建一个全局的引导进入链表的指针

test *create()
{
test *ls;//节点指针
test *le;//链尾指针
ls = new test;//把ls指向动态开辟的堆内存地址
cout<<"请输入第一个节点number和节点score,输入0.0跳出函数"<<endl;
cin>>ls->number>>ls->socre;
head=NULL;//进入的时候先不设置head指针指向任何地址,因为不知道是否一上来就输入null跳出程序
le=ls;//把链尾指针设置成刚刚动态开辟的堆内存地址,用于等下设置le->next,也就是下一个节点的位置
while(ls->number!=0)//创建循环条件为ls->number的值不是null,用于循环添加节点
{
if(head==NULL)//判断是否是第一次进入循环
{
head=ls;//如果是第一次进入循环,那么把引导进入链表的指针指向第一次动态开辟的堆内存地址
}
else
{
le->next=ls;//如果不是第一次进入那么就把上一次的链尾指针的le->next指向上一次循环结束前动态创建的堆内存地址
}
le=ls;//设置链尾指针为当前循环中的节点指针,用于下一次进入循环的时候把上一次的节点的next指向上一次循环结束前动态创建的堆内存地址
ls=new test;//为下一个节点在堆内存中动态开辟空间
cout<<"请下一个节点number和节点score,输入0.0跳出函数"<<endl;
cin>>ls->number>>ls->socre;
}
le->next=NULL;//把链尾指针的next设置为空,因为不管如何循环总是要结束的,设置为空才能够在循环显链表的时候不至于死循环
delete ls;//当结束的时候最后一个动态开辟的内存是无效的,所以必须清除掉
return head;//返回链首指针
}
void showl(test *head)
{
cout<<"链首指针:"<<head<<endl;
while(head)//以内存指向为null为条件循环显示先前输入的内容
{
cout<<head->number<<"|"<<head->socre<<endl;
head=head->next;
}
}
void deletel(test *&head,int number)//这里如果参数换成test *head,意义就完全不同了,head变成了复制而不是原有链上操作了,特别注意,很多书上都不对这里
{
test *point;//判断链表是否为空
if(head==NULL)
{
cout<<"链表为空,不能进行删除工作!";
return;
}

int derror=1;//设置找不到的情况的条件,预先设置为真
test *check=head;
while(check)//利用循环进行查找
{
if (check->number==number)
{
derror=0;//条件转为假
}
check=check->next;
}
if(derror)//如果为假就跳出函数
{
return;
}

if(head->number==number)//判删除的节点是否为首节点
{
point=head;
cout<<"删除点是链表第一个节点位置!";
head=head->next;//重新设置引导指针
delete point;
return;
}
test *fp=head;//保存连首指针
for(test *&mp=head;mp->next;mp=mp->next)
{
if(mp->next->number==number)
{
point=mp->next;
mp->next=point->next;
delete point;
head=fp;//由于head的不断移动丢失了head,把进入循环前的head指针恢复!
return;
}
}
}

void insterl(int number)
{
test *point=new test;
cout<<"请输入节点number和节点score"<<endl;
cin>>point->number>>point->socre;

if(head==NULL)//链表为空的情况下插入
{
head=point;
point->next=NULL;
return;
}

int ierror=1;//设置找不到的情况的条件,预先设置为真
test *le;
test *check=head;
while(check)//利用循环进行查找
{
if (check->number==number)
{
ierror=0;//条件转为假
}
le=check;
check=check->next;
}
if(ierror)
{
cout<<le->number;
le->next=point;
point->next=NULL;
return;
}

if(head->number==number)//检测是否是在第一个节点处插入
{
point->next=head;
head=point;
return;
}

for(test *&mp=head;mp->next;mp=mp->next)//在链表中间插入
{
if(mp->next->number==number)
{
point->next=mp->next;
mp->next=point;
return;
}
}

}
void main()
{
head=create();//调用创建
showl(head);
int dp;
cout<<"请输入删除点如果找不到就跳出函数"<<endl;
cin>>dp;
deletel(head,dp);//调用删除
showl(head);
int ip;
cout<<"请输入插入点如果找不到就在链尾添加"<<endl;
cin>>ip;
insterl(ip);
showl(head);
cin.get();
cin.get();
}

到此关于结构体的内容已经全部讨论结束,链表的建立删除插入操作可以很好的对前面所学知识进行一个总结,它既考察了程序员对内存大理解(堆内存操作、指针操作)也考察了对结构化编程掌握的熟悉程序。

以后的教程我们将着重训练面向对象的编程的相关知识点。

[] [返回上一页] [打 印] [收 藏]
  [相关文章评论]    (评论内容只代表网友观点,与本站立场无关!) [更多评论...]
 

  C/C++中命令行参数的..
c/c++中结构体的入门..
c/c++中结构体的入门..
c/c++中结构体的入门..
c/c++中结构体的入门..
c/c++中结构体(stru..
c/c++中结构体(stru..
c/c++中结构体(stru..
c/c++中结构体(stru..
C/C++数组名与指针区..


 
中华隐士黑客联盟
本站超级酷的Flash (不看会后悔的..
免费在线看的电影网站(一)
最新QQ空间4.0全屏版效果图!!
免费获得Q币的最新方法
黑客快速入门(强烈推荐)
不用木马,轻松万能偷盗QQ号码
揭秘远程破解盗窃QQ密码的各种方..
免费二级域名申请
18岁少女欲6000元卖处女身 救患血..
 
防止QQ和QQ币游戏币被盗的办法 12-03
养在深闺人未识:FU_Rootkit 12-03
黑客学堂:什么是社会工程学? 12-03
VB程序实现XP效果的界面 12-03
fport.vbs for XP/2003 12-03
保卫自己网站的胜利果实 12-03
SQL注入建立虚拟目录,免得找Web.. 12-03
搜索型注入的文章 12-03
如何用虚拟机安装Windows Vista系.. 12-03
通杀腾讯QCC所有商品免费拿! 12-03
 
关于本站 网站帮助 广告合作 下载声明 友情连接 网站地图 访客留言 论坛登录
〖中华隐士黑客联盟〗,Copyright © 2006-2010 WwW.Hack86.Com 闽ICP备:06023304号
站长:小质 QQ:771760,软件发布MAIL:Hack086@21cn.com