C++双向循环链表的操作与实现

双向循环链表的操作与实现……

网上关于这方面的挺多,由于自己以前上课没好好学数据结构,现在重新认识数据结构,以下是自己写的基于C++的双向循环链表的创建及其一些操作与实现(于VC下通过),没用模板,

也没用类,所以比较适合有一点C++语言基础入门者,但可移植不够。有什么bug的话,欢迎指出。

或有什么问题也可以联系我。

made by virgil (2009.2.8)

MSN:hangyu_628@hotmail.com)

#include <iostream>
#include <cstdlib>
using namespace std;
  int N=10;
struct Node
{
char name[20];
Node *llink,*rlink;
};
  Node* Create(int n)
{
Node *h,*p,*s; //h:头结点,p:下一结点,s:当前结点
int i;
if((h=new Node)==NULL)
{
cout<<"分配内存失败..."<<endl;
}
h->name[0]=0;
h->llink=NULL;
h->rlink=NULL;
p=h;
for (i=0;i!=n;++i)
{
if((s=new Node)==NULL)
{
cout<<"分配内存失败..."<<endl;
}
p->rlink=s;
cout<<"请输入第"<<i+1<<"个人的姓名:";
cin>>s->name;
s->llink=p;
s->rlink=NULL;
p=s;
}
s->rlink=h;
h->llink=s;
return h;
}
Node* Search(Node* h,const char* name)
{
Node *p=h->rlink;
for (int i=0;i!=N;++i)
{
if (strcmp(p->name,name)==0)
{
return p;
}
p=p->rlink;
}
return p;
}
void Insert(Node *p)
{
Node *s=new Node;
cout<<"请输入要插入的姓名:";
cin>>s->name;
Node *r=p->rlink; //结点示意 p->s->r(s为插入的结点)
p->rlink=s;
s->llink=p;
r->llink=s;
s->rlink=r;
++N;
}
void Delete(Node *p)
{
Node *l=p->llink; //结点示意 l->p->r (p为要删除的结点)
Node *r=p->rlink;
l->rlink=r;
r->llink=l;
delete p;
--N;
}
void Display(Node *h)
{
Node *p;
p=h->rlink;
for (int i=0;i!=N;++i)
{
cout<<"第"<<i+1<<"个人的姓名:"<<p->name<<endl;
// delete p;
p=p->rlink;
}
}
  int main()
{
Node *head,*pSearch;
int number=N;
char strName[20];
head=Create(number);
cout<<endl;
  cout<<"你创建的结构如下:"<<endl;
Display(head);
cout<<endl;
//查找并插入...
cout<<"请输入你要查找的人的姓名:";
cin>>strName;
pSearch=Search(head,strName);
cout<<"你所要查找的人的姓名是: "<<pSearch->name<<endl;
cout<<endl;
Insert(pSearch);
cout<<"插入后的结果如下:"<<endl;
Display(head);
cout<<endl;
  //查找并删除...
cout<<"输入你要删除的结点: ";
cin>>strName;
pSearch=Search(head,strName);
Delete(pSearch);
cout<<"删除后的结果如下:"<<endl;
Display(head);
cout<<endl;
return 0;
}

时间: 2024-10-01 11:33:04

C++双向循环链表的操作与实现的相关文章

学生管理系统——基于双向循环链表

基于双向循环链表实现的学生管理系统,包括初始化,插入,删除,查抄,保存,自动按照姓名排序功能,退出并保存功能. 实现思想是将程序的各个部分划分为三个层次.主函数为界面层,即客户端层:其中后缀为Student的一般是某个功能的调度函数,属于逻辑层的内容:在调度函数之下有相应的被调度的函数,也就是相应功能的实现函数,一般后缀名为Node,意思就是这个函数直接操作链表中的结点,可以简单的划分为实现层: 这样分层实现呢有利于代码维护和个功能之间对包含或者重叠功能的直接调用,从而提高代码重用度,而降低代码

求大神指导双向循环链表问题【0xC0000005: 读取位置 0xfeeefeee 时发生访问冲突】

问题描述 求大神指导双向循环链表问题[0xC0000005: 读取位置 0xfeeefeee 时发生访问冲突] 小弟欲新建一双向循环链表,对链表中符合删除条件的数据进行删除操作.整个程序编译无bug,运行中断.主函数运行到新建链表后打印函数中的cout<data<<" ";VS2010显示的错误为"0xC0000005: 读取位置 0xfeeefeee 时发生访问冲突",求大神指教,是否是我新建链表的函数或宏定义中new和delete函数使用错误,

java双向循环链表

  代码如下   package com.xlst.util; import java.util.HashMap; import java.util.Map; import java.util.UUID; /** * 双向循环链表 * 完成时间:2012.9.28 * 版本1.0 * @author xlst * */ public class BothwayLoopLinked { /** * 存放链表长度的 map * * 如果简单使用 static int 型的 size 基本类型变量,则

java双向循环链表实现程序

  例1  代码如下   package com.xlst.util;    import java.util.HashMap;  import java.util.Map;  import java.util.UUID;    /**   * 双向循环链表   * 完成时间:2012.9.28   * 版本1.0   * @author xlst   *   */  public class BothwayLoopLinked {      /**       * 存放链表长度的 map   

如何用C++实现双向循环链表_C 语言

双向循环链表,即每个节点都拥有一前一后两个指针且头尾互链的链表.各种链表的简单区别如下:单向链表:基本链表:单向循环链表:不同于单向链表以 NULL 判断链表的尾部,单向循环链表的尾部链接到表头,因此当迭代操作到表头前即是尾部:双向链表:比单向链表多出指向前一个节点的指针,但实际上使用双向链表时很少使用不循环的:双向循环链表:相对于单向循环链表,双向循环链表可从头部反向迭代,这在链表长度很大且需要获取.插入或删除靠近链表尾部元素的时候十分高效.单向循环列表只能从表头正向迭代,执行的时间大于从反向

java双向循环链表的实现代码_java

例1: 复制代码 代码如下: package com.xlst.util; import java.util.HashMap;import java.util.Map;import java.util.UUID; /*** 双向循环链表* 完成时间:2012.9.28* 版本1.0* @author xlst**/public class BothwayLoopLinked {/*** 存放链表长度的 map* * 如果简单使用 static int 型的 size 基本类型变量,则只能维护一个

C++数据结构与算法专题

快速排序算法的C++实现 详解qsort函数的用法 C++求二个数的最大公约数与最小公倍数实例 小览CallStack(调用栈)(三)-用调试器脚本查看调用栈信息 小览call stack(调用栈) (二)--调用约定 小览call stack(调用栈) (一) C++/CLI中栈对象的设计问题 POJ 1694 C++ (排序) 高效实现Josephus算法 利用堆排序实现学生成绩管理 C++双向循环链表的操作与实现 基于Crtpto++的RSA签名算法 自定义函数使用map排序 C++数据结

深度剖析linux内核万能--双向链表,Hash链表模版

我们都知道,链表是数据结构中用得最广泛的一种数据结构,对于数据结构,有顺序存储,数组就是一种.有链式存储,链表算一种.当然还有索引式的,散列式的,各种风格的说法,叫法层出不穷,但是万变不离其中,只要知道什么场合用什么样的数据结构,那就行了. 那么,标题说的内核万能链表,其实就是内核链表,它到底和我们平常大学学的数据结构的链表有什么不同呢??内核链表,是在linux内核里的一种普遍存在的数据结构,比如内核调度算法中有这样的结构,摄像头驱动程序,wifi模块,G_sensor等等,用到链表的东西实在

《数据结构与算法 C语言版》—— 2.6小结

2.6小结 线性表是整个数据结构课程的重要基础,本章的主要内容如下.一个线性表是由n个数据元素构成的有限序列,其特点是数据元素之间存在着线性关系.在计算机中表示这种关系的两种不同的存储结构是顺序存储结构(顺序表)和链式存储结构(链表).1顺序表顺序表是在内存中用一组地址连续的存储单元依次存储线性表的数据元素,借助数组来实现.顺序表中数据元素之间的逻辑关系通过其"存储位置相邻"来表示.对于顺序表,主要有初始化.建立.销毁.插入.删除.按值查找等基本操作.插入和删除操作约需移动一半的元素