C++实现链表操作
来源:互联网 发布:淘宝服装货源怎么找 编辑:程序博客网 时间:2024/05/21 17:53
//写一个类
//要求
//1、使用该类创建一个对象 A a;之后,就自动建立了一个单链表的头
//2、类中的函数:a、可以往单链表中添加一个结点;b、可以将头结点的后继结点删除;
//3、当对象出作用域的时候,自动释放所有单链表的空间
//4、打印方式:C++ cout cin <<endl;
//5、内存申请与释放:new和delete;
//数组操作:
//delete new
//构造,析构
#include <iostream>
#include <Windows.h>
//检查内存泄露的代码
#ifdef _DEBUG
#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)
#else
#define DEBUG_CLIENTBLOCK
#endif
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#ifdef _DEBUG
#define new DEBUG_CLIENTBLOCK
#endif
using namespace std;
struct node
{
int data;
node *next;
};
class linklist
{
private:
node *head;
public:
linklist();
void create();
void listlength();
void addlast();
void insert();
void delheadnext();
void display();
~linklist();
};
linklist::linklist()
{
head = new node;
head->next = NULL;
}
//后插法建立链表
void linklist::create()
{
node *p, *q;
p = head;
int temp = -1;
cin>>temp;
while (temp != -1)
{
//新节点
q = new node;
q->data=temp;
q->next=NULL;
//拼接
p->next = q;
p = q;
cin>>temp;
}
}
//返回链表的长度
void linklist::listlength()
{
int len = 0;
node *p = head;
while (p->next)
{
len++;
p = p->next;
}
cout<<endl<<"现在链表的长度是:"<<len<<endl;
}
//在最后插入一个值
void linklist::addlast()
{
node *p, *q;
int val;
cout<<"输入一个值:"<<'\t';
cin>>val;
cout<<"在最后插入值val:"<<val<<endl;
p = head;
q = new node;
q->data = val;
q->next = NULL;
while (p->next)
{
p = p->next;
}
p->next = q;
}
//在第pos位置插入一个val
void linklist::insert()
{
node *p, *q;
int i, val, pos;
i = 0;
cout<<"输入val的值:"<<'\t';
cin>>val;
cout<<"输入pos的值:"<<'\t';
cin>>pos;
cout<<"在"<<pos<<"后插入值:"<<val<<endl;
p = head;
while(pos > 0 && i< pos) {
while (p && i < pos)
{
p = p->next;
++i;
}
q = new node;
q->data = val;
q->next = p->next;
p->next = q;
}
}
//删除头结点之后的节点
void linklist::delheadnext()
{
cout<<"删除头结点之后的后继结点之后:"<<endl;
node *p;
//p=NULL
if(head->next)
{
p=head->next;
head->next= head->next->next;
delete p;
p=NULL;
}
}
//显示链表
void linklist::display()
{
node *p=head;
while (p->next)
{
cout<<p->next->data;
p = p->next;
cout<<'\t';
}
listlength();
cout<<endl;
}
linklist::~linklist()
{
node *p;
while (head->next)
{
p = head;
head = head->next;
delete p;
p=NULL;
}
delete head;
head=NULL;
}
int main()
{
linklist list;
cout<<"输入链表:"<<endl;
list.create();
list.display();
list.addlast();
list.display();
list.insert();
list.display();
list.delheadnext();
list.display();
_CrtDumpMemoryLeaks();
system("pause");
return 0;
}
//要求
//1、使用该类创建一个对象 A a;之后,就自动建立了一个单链表的头
//2、类中的函数:a、可以往单链表中添加一个结点;b、可以将头结点的后继结点删除;
//3、当对象出作用域的时候,自动释放所有单链表的空间
//4、打印方式:C++ cout cin <<endl;
//5、内存申请与释放:new和delete;
//数组操作:
//delete new
//构造,析构
#include <iostream>
#include <Windows.h>
//检查内存泄露的代码
#ifdef _DEBUG
#define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__)
#else
#define DEBUG_CLIENTBLOCK
#endif
#define _CRTDBG_MAP_ALLOC
#include <stdlib.h>
#include <crtdbg.h>
#ifdef _DEBUG
#define new DEBUG_CLIENTBLOCK
#endif
using namespace std;
struct node
{
int data;
node *next;
};
class linklist
{
private:
node *head;
public:
linklist();
void create();
void listlength();
void addlast();
void insert();
void delheadnext();
void display();
~linklist();
};
linklist::linklist()
{
head = new node;
head->next = NULL;
}
//后插法建立链表
void linklist::create()
{
node *p, *q;
p = head;
int temp = -1;
cin>>temp;
while (temp != -1)
{
//新节点
q = new node;
q->data=temp;
q->next=NULL;
//拼接
p->next = q;
p = q;
cin>>temp;
}
}
//返回链表的长度
void linklist::listlength()
{
int len = 0;
node *p = head;
while (p->next)
{
len++;
p = p->next;
}
cout<<endl<<"现在链表的长度是:"<<len<<endl;
}
//在最后插入一个值
void linklist::addlast()
{
node *p, *q;
int val;
cout<<"输入一个值:"<<'\t';
cin>>val;
cout<<"在最后插入值val:"<<val<<endl;
p = head;
q = new node;
q->data = val;
q->next = NULL;
while (p->next)
{
p = p->next;
}
p->next = q;
}
//在第pos位置插入一个val
void linklist::insert()
{
node *p, *q;
int i, val, pos;
i = 0;
cout<<"输入val的值:"<<'\t';
cin>>val;
cout<<"输入pos的值:"<<'\t';
cin>>pos;
cout<<"在"<<pos<<"后插入值:"<<val<<endl;
p = head;
while(pos > 0 && i< pos) {
while (p && i < pos)
{
p = p->next;
++i;
}
q = new node;
q->data = val;
q->next = p->next;
p->next = q;
}
}
//删除头结点之后的节点
void linklist::delheadnext()
{
cout<<"删除头结点之后的后继结点之后:"<<endl;
node *p;
//p=NULL
if(head->next)
{
p=head->next;
head->next= head->next->next;
delete p;
p=NULL;
}
}
//显示链表
void linklist::display()
{
node *p=head;
while (p->next)
{
cout<<p->next->data;
p = p->next;
cout<<'\t';
}
listlength();
cout<<endl;
}
linklist::~linklist()
{
node *p;
while (head->next)
{
p = head;
head = head->next;
delete p;
p=NULL;
}
delete head;
head=NULL;
}
int main()
{
linklist list;
cout<<"输入链表:"<<endl;
list.create();
list.display();
list.addlast();
list.display();
list.insert();
list.display();
list.delheadnext();
list.display();
_CrtDumpMemoryLeaks();
system("pause");
return 0;
}
- C实现链表操作
- C语言链表实现队列操作
- C++:操作单向链表的实现
- C语言链表各类操作实现
- C语言实现链表基本操作
- 线性链表基本操作实现(C/C++)
- 链表的实现与操作(C语言实现)
- 静态链表的实现与操作(C语言实现)
- 循环链表的实现与操作(C语言实现)
- 双向链表的实现与操作(C语言实现)
- 链表的基本操作(c链表实现)
- C 类LinkList实现线性链表的一般操作
- 链表的基本操作(c实现)
- C语言实现双向链表的基本操作
- C语言实现双向链表的基本操作
- 双向链表的操作实现(c语言)
- 双向链表操作大全C语言实现
- 学习心得:链表的操作(C语言实现)
- DbgHelp函数(一)
- 关于优先级队列STL
- 《windows核心编程系列》二谈谈ANSI和Unicode字符集
- 将win7电脑无线网变身WiFi热点,让手机、笔记本共享上网
- 程序员的五件武器
- C++实现链表操作
- startActivityForResult的用法
- mysql数据库的优化
- oracle ORA-01704: string literal too long问题分析
- Phil Libin的六步计划 让Evernote从应用变成平台
- c++、vc++ 数据精度、小数点取舍、数据四舍五入、保留2位小数、数据之间加入","
- strlen与sizeof区别
- Bloom Filter
- SqlDataReader的GetChar不支持所指定的方法