c++利用类进行单链表的插入,删除,清空操作

#if 1

#include <iostream>
#include <stdlib.h>
#include <time.h>
#include <fstream>
#include <string>

using namespace std;

//类
class List
{
public:
	//构造器初始化,生成头节点
	List()
	{
		head = new Node;
		head->next=NULL;
	}

	//成员函数
	void createList(); 
	void insertList(int data);
	void travelList();
	void input();
	int  addNode();
	void deleteData(int addNum);
	void ifClear();
	void clearList();
private:
	//数据成员
	struct Node
	{
		int data; //数据域
		struct Node * next;	//指针域
	
	} * head;//头指针

	int num;//链表元素个数
};


//头插法生成节点
void List::insertList(int data)
{
	Node * cur=new Node;

	//插入数据
	cur->data=data;

	//插入节点
	cur->next =head->next;
	head->next=cur;
}

//调用insertList输入数据,生成链表
void List::input()
{
	cout<<"请输入链表数量长度:";
	cin >>num;
	srand(time(NULL));
	for(int i=0;i<num;i++)
	{
		insertList(rand()%100);
	}
}

//任意位置插入节点
int List::addNode()
{
	int d,idx;

	cout<<"请输入你要插入的节点数据:";
	cin >>d;
	cout<<"请输入你要插入的节点位置: ";
	cin >>idx;

	Node *tp=NULL;
	Node *link=head;

	//寻找插入位置
	if(idx<1||idx>num+1)
		cout<<"操作非法"<<endl;
	else
	{
		for(int i=0;i<idx;i++)
		{
			tp=link;
			link=link->next;
		}

		Node *cur=new Node;
		tp->next=cur;
		cur->data=d;
		cur->next=link;
		travelList();
		return ++num;
	}
}

//遍历链表并将数据存入文件
void List::travelList()
{
	ofstream mycout("D:/text.txt");
	Node *temp = head->next;	//防止头指针地址改变
	while(temp != NULL)
	{
		cout<<temp->data<<"  ";
		mycout<<temp->data<<"  ";
		temp=temp->next;
	}
	mycout.close();
	cout<<endl;
}

//删除节点
void List::deleteData(int addNum)
{
	int i,j=0;
	cout<<"请问您要删除第几个数据: ";
	cin >>i;
	Node *tp=NULL;
	Node *link=head;//link为删除节点后面的一个节点,temp为删除节点

	if(addNum<i||i<0)
		cout<<"操作非法!!"<<endl;
	else
	{
		while(link->next)
		{
			tp=link->next; //第一个节点
			j++;
			if(i==j)   //找的删除的节点
			{
				link->next=tp->next;
				delete tp;
				break;
			}	
			link=link->next;
		}
		travelList();
	}

}

//清空链表
void List::clearList()
{
	Node *tp = NULL;
	Node *ph=head->next;

	while(head->next)
	{
		tp=ph;
		ph=ph->next;
		delete tp;
		head->next=ph;
	}

	travelList();
	cout<<endl;
}

//询问是否清空
void List::ifClear()
{
	string i;

	if(!head->next)
	{
		cout<<"链表已清空!!!"<<endl;
	}
	
	else 
	{
		cout<<"是否清空链表(是/否):";
		cin>>i;
		
		if(i=="是")
		{
			clearList();
			cout<<"链表清空完成!!!"<<endl;
		}
		else
			cout<<"链表未清空!!!"<<endl;
	}
}

void main()
{
	//初始化,生成头节点
	List list;

	//输入链表长度
	list.input();

	//遍历链表,并存入文件
	list.travelList();

	//添加节点并返回总结点数
	int addNum=list.addNode();

	//删除节点
	list.deleteData(addNum);

	//是否清空链表
	list.ifClear();

	system("pause");

}
#endif

  

总结:汉字输入需要用string,在头文件string中;字符串比较可以直接用比较运算符;