用c++写一个链表

Posted 福尔摩聪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用c++写一个链表相关的知识,希望对你有一定的参考价值。

1.首先写头文件Linklist.h。每个节点都有两个要素:数据和指针。定义linklist类,声明一些基本操作函数,如下:

 

#include <iostream>
struct Node 
	int data;
	Node *next;
;
class Linklist 
private:
	Node * Head;
public:
	Linklist();
	void CreatList1(int n);        //头插入法创建链表
	void CreatList2(int n);        //尾插入法创建链表
	void Insert(int i, int e);     //插入函数
	int Delete(int i);             //删除表中元素
	int GetData(int i);            //取得表中元素值
	int Search(int obj);           //在表中寻找匹配项
	int ListLength();              //获得表的长度
	void Display();                //遍历整个链表
;


2.在cpp文件中重定义基本操作函数,如下:

 

 

Linklist::Linklist()                    //构造函数
	Head = new Node;
	Head->next = NULL;

void Linklist:: CreatList1(int n)       //头插入法创建链表
	Node *p;
	Node *temp;
	p = Head;
	cout << "请依次输入" << n << "个链表的值:";
	for (int i = 1; i <= n; i++) 
		temp = new Node;
		cin >> temp->data;
		temp->next = p->next;
		p->next = temp;
	

void Linklist::CreatList2(int n)       //尾插入法创建链表
	Node *p;
	Node *temp;
	p = Head;
	cout<< "请依次输入" << n << "个链表的值:";
	for (int i = 0; i < n; i++) 
		temp = new Node;
		cin >> temp->data;
		p->next = temp;
		p = temp;
	
       p->next = NULL;


void Linklist::Insert(int i, int e)        //在i处插入e
	Node *temp;
	temp = Head;
	int j = 0;
	while (temp&&j < i-1) 
		temp = temp->next;
		j++;
	
	if (!temp || j > i - 1) 
		cout << "插入位置错误";
	
	else 
		Node *s;
		s = new Node;
		s->data = e;
		s->next = temp->next;
		temp->next = s;
	

int Linklist::Delete(int i)           //删除i处的数据
	Node *temp;
	temp = Head;
	int j = 0;
	while (temp&&j < i - 1) 
		temp = temp->next;
		j++;
	
	if (!temp || j > i - 1) 
		cout << "删除位置错误";
		return -1;
	
	else 
		Node *s;
		s = temp->next;
		temp->next = s->next;
		delete s;
	

int Linklist::GetData(int i)         //得到i处的元素
	Node *temp;
	temp = Head;
	int j = 0;
	while (temp&&j < i - 1) 
		temp = temp->next;
		j++;
	
	if (!temp || j > i - 1) 
		cout << "寻找位置错误\\n";
		return -1;
	
	else 
		cout << i << "处的数据为:" << temp->next->data<<"\\n";
		return temp->data;
	

int Linklist::Search(int obj)        //寻找链表中有无与obj匹配的元素
	int j = 1;
	Node *temp;
	temp = Head->next;
	while (temp && temp->data != obj) 
		temp = temp->next;
		j++;
	
	if (temp == NULL) 
		cout << "该链表中无此元素"<<"\\n";
		return 0;
	
	else 
		cout << "在该链表中的第" << j << "个元素等于"<<obj<<"\\n";
		return j;
	

int Linklist::ListLength()                 //计算链表长度
	Node *temp;
	temp = Head;
	int j = 0;
	while (temp) 
		temp = temp->next;
		j++;
	
	cout << "该链表的长度为:" << j-1<<"\\n";
	return j;

void Linklist::Display()
	Node *temp;
	temp = Head->next;
	int e;
	cout << "该链表的遍历依次为:";
	while (temp) 
		e = temp->data;
		cout << e << " ";
		temp = temp->next;
	
	cout << "\\n";
  

3.测试主函数如下:

 

 

void main()    //测试小程序
	int user_num;
	cout << "请输入链表的长度:";
	cin >> user_num;
	Linklist list1;
	Linklist list2;
	list1.CreatList1(user_num);  //头插入法依次插入元素
	cout << "头插入法创造的链表\\n";
	list1.Display();     
	list1.Insert(2, 99);
	list1.Display();
	list1.GetData(2);
	list1.Search(11);
	list1.Search(99);
	list1.Delete(3);
	list1.Display();
	list1.ListLength();

	list2.CreatList2(4);
	list2.Display();


测试结果如下图:

 

 

 

以上是关于用c++写一个链表的主要内容,如果未能解决你的问题,请参考以下文章

c++中list链表如何实现输出指定位置的值

双向链表的增删改查C++完整实现

用 C++ 制作一个简单的链表

c++静态链表

百战c++

百战c++