单链表的相关实现

头文件SList.h
#define _CRT_SECURE_NO_WARNINGS 1
#include<iostream>
#include<stdio.h>
using namespace std;

#pragma once
typedef int DataType;
struct Node
{
	Node(const DataType& d)
	:_data(d)
	, _next(NULL)
	{}
	DataType _data;
	struct Node* _next;
};

class SList
{
public:
	friend ostream& operator<<(ostream& os, SList& s);
	SList()
		:_head(NULL)
		, _tail(NULL)
	{}
	~SList()
	{
		if (_head == NULL)
			return;
		Node* cur = _head;
		while (cur)
		{
			Node* del = cur;
			cur = cur->_next;
			delete del;
		}
		delete cur;
		_head = NULL;
		_tail = NULL;
	}
public:
	void PushBack(const DataType& d);
	void PopBack();
	void PushFront(const DataType& d);
	void PopFront();
	Node* Find(const DataType& d);
	void Insert(Node* pos,const DataType& d);
private:
	Node* _head;
	Node* _tail;
};
源文件
#include"SList.h"
 ostream& operator<<(ostream& os, SList& s)
{
	if (s._head == NULL)
		return os;
	Node* cur = s._head;
	while (cur!= NULL)
	{
		os << cur->_data << "->";
		cur = cur->_next;
	}
	cout << "over" << endl;
	return os;
}
void SList::PushBack(const DataType& d)
{
	Node* newNode = new Node(d);
	if (_head == NULL)//无节点
	{
		_head = newNode;
		_tail = _head;
	}
	else
	{
		_tail->_next = newNode;
		_tail = newNode;
	}
}

#include"SList.h"

int main()
{
	SList slist1;
	slist1.PushBack(1);
	slist1.PushBack(2);
	slist1.PushBack(3);
	slist1.PushBack(4);
	cout << slist1 << endl;
	slist1.PopBack();
	cout << slist1 << endl;
	slist1.PopBack();
	cout << slist1 << endl; 
	slist1.PopBack();
	cout << slist1 << endl;
	slist1.PopBack();
	cout << slist1 << endl;
	slist1.PopBack();
	cout << slist1 << endl;
	getchar();
	return 0;
}


你可能感兴趣的:(include,public,friend)