数据结构 单链表 C++面向对象方式实现

①. 列表类头文件List.h

/*
 * List.h
 *
 *  Created on: 2015-11-23
 *      Author: John
 */

#ifndef LIST_H_
#define LIST_H_
#include <stdlib.h>
typedef int ElementType;

class List {
private:
	// Structure inside the class LinkedList
	// This is one node which is not needed by the caller. It is just
	// for internal work.
	/*** 节点类 ***/
	class Node{
	public:
		ElementType data;
		Node* next;
	};
	typedef Node* NodePointer;

// public member
public:
	/*** List 的函数成员 ***/
	// constructor
	List();
	void addValue(int val);
	int popValue();

// private member
private:
	/*** List 的数据成员 ***/
	// 这个是私有的成员变量,他指向第一个节点。
	// this is the private member variable. It is just a pointer to the first Node
	Node* head;
};

#endif /* LIST_H_ */
 ②.列表类实现文件:

/*
 * List.cpp
 *
 *  Created on: 2015-11-23
 *      Author: John
 */
//  http://stackoverflow.com/questions/22141477/simple-linked-list-c
#include "List.h"

List::List() {
	// TODO Auto-generated constructor stub
	head = NULL;
}


// 使用头插法在list的开始位置插入节点
// This prepends a new value at the beginning of the list
void List::addValue(int val){
	Node * n = new Node();	// create new Node 创建一个新的节点
	n->data = val;		// set value	        设置值
	n->next = head;		// make the node point to the next node. 将新节点指向另一个节点
				// If the list is empty, this is NULL, so the end of the list --> OK
				// 如果list为空,那么head的值为NULL,n->next的值也为NULL,该节点就是List的最后一个节点
	head = n;		// last but not least, make the head point at the new node.
				// 最后,让head节点指向新创建的节点。
}

// 返回列表中第一个元素,并删除这个节点
// returns the first element in the list and deletes the Node.
// <del>caution, no error-checking here!</del>
int List::popValue(){
	Node * n = head;
	if(head){
		int ret = n->data;

		head = head->next;
		delete n;
		return ret;
	}
				// C/C++中如何获得int的最大值
	unsigned int temp = 0;	//http://blog.csdn.net/sanqi322/article/details/6321129
	return (~temp)/2+1;	// 返回int最小值(使用最大有符号int,然后将其1溢出后的值)
	// 获取最大值最小值的另一个参考http://blog.csdn.net/xuexiacm/article/details/8122267
}
③.测试:

/*
 * List_test.cpp
 *
 *  Created on: 2015-11-23
 *      Author: John
 */

#include "List.h"

#include <iostream>

int main(){
	using std::cout;
	using std::endl;

	List linkList;
	linkList.addValue(5);
	linkList.addValue(10);
	linkList.addValue(15);

	cout<< linkList.popValue() <<endl;
	cout<< linkList.popValue() <<endl;
	cout<< linkList.popValue() <<endl;
	<del>// 因为在popValue()函数里面没有错误检测,
	// 下面的语句将会导致不确定的行为
	// 程序有可能会崩溃,因为list没有用来弹出的值了。
	// because there is no error checking in popValue(), the following
	// is undefined behavior. Probably the program will crash, because
	// there are no more values in the list.
	// cout << list.popValue() << endl;</del>
	cout<< linkList.popValue() <<endl;	// 多弹出的一个元素
}

输出Output:

15
10
5
-2147483648



你可能感兴趣的:(数据结构,C++,面向对象,单链表)