首页 > 代码库 > 【C++/数据结构】单链表的基本操作

【C++/数据结构】单链表的基本操作

#pragma once
#ifndef _CLIST_H_
#define _CLIST_H_

#include <iostream>
#include <assert.h>
using namespace std;

template<class Type> class List;

typedef enum { FALSE, TRUE }Status;

template<class Type>
class ListNode
{
	friend class List<Type>;
public:
	ListNode() :data(Type()), next(NULL)
	{}
	ListNode(Type d, ListNode<Type> *n = NULL)
		: data(d), next(n)
	{}
	~ListNode()
	{}
	void setData(const Type &d)
	{
		data = http://www.mamicode.com/d;>



#include "CList.h"

void main()
{
	List<int> mylist;
	List<int> youlist;
	List<int> mergelist;

	int select = 1;
	int pos;
	int item;
	system("Color 0d");
	while (select)
	{
		cout << "************************************" << endl;
		cout << "* [0]  quit_system [1] push_back   *" << endl;
		cout << "* [2]  push_front  [3] show_list   *" << endl;
		cout << "* [4]  pop_back    [5] pop_front   *" << endl;
		cout << "* [6]  insert_val  [7] delete_val  *" << endl;
		cout << "* [8]  merge       [9] next        *" << endl;
		cout << "* [10] find       [11] sort        *" << endl;
		cout << "* [12] resver     [13] length      *" << endl;
		cout << "* [14] clear      [15] destroy     *" << endl;
		cout << "* [16] modify_val [17] prio        *" << endl;
		cout << "************************************" << endl;
		cout << "请选择:>";
		cin >> select;
		switch (select)
		{
		case 1:
			cout << "请输入要插入的数据(-1结束):>";
			while (cin >> item, item != -1)
			{
				mylist.push_back(item);
			}
			break;
		case 2:
			cout << "请输入要插入的数据(-1结束):>";
			while (cin >> item, item != -1)
			{
				mylist.push_front(item);
			}
			break;
		case 3:
			system("cls");
			mylist.show_List();
			system("pause");
			break;
		case 4:
			mylist.pop_back();
			break;
		case 5:
			mylist.pop_front();
			break;
		case 6:
			cout << "请输入要插入的值:>";
			cin >> item;
			mylist.insert_val(item);
			break;
		case 7:
			cout << "请输入要删除的值:>";
			cin >> item;
			mylist.delete_val(item);
			break;
		case 8:
			for (int i = 1; i < 10; i+=2)
			{
				mylist.push_back(i);
			}
			for (int i = 2; i < 10; i += 2)
			{
				youlist.push_back(i);
			}
			mergelist.merge(mylist, youlist);
			mergelist.show_List();
			break;
		case 9:
			cout << "请输入要查找的值:>";
			cin >> item;
			cout << "所在查找值的后继为:" << mylist.Next(item) << endl;
			break;
		case 10:
			cout << "请输入要查找的值:>";
			cin >> item;
			cout << "该值指针为:" << mylist.find(item) << endl;
			break;
		case 11:
			mylist.sort();
			break;
		case 12:
			mylist.resver();
			break;
		case 13:
			cout << "线性表的长度为:" << mylist.length() << endl;
			break;
		case 14:
			mylist.clear();
			break;
		case 15:
			mylist.destroy();
			break;
		case 16:
			cout << "请输入要改动的值:>";
			cin >> item;
			cout << "请输入改动后的值:>";
			cin >> pos;
			mylist.modify_val(item, pos);
			break;
		case 17:
			cout << "请输入要查找的值:>";
			cin >> item;
			cout << "所在查找值的前驱为:" << mylist.Prio(item) << endl;
			break;
		default:
			break;
		}
	}
}


执行界面例如以下:

技术分享

【C++/数据结构】单链表的基本操作