zoukankan      html  css  js  c++  java
  • 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中;字符串比较可以直接用比较运算符;
  • 相关阅读:
    图表显示磁盘容量
    检测磁盘是否已经准备好
    取消磁盘共享
    远程关闭计算机
    实现注销 关机 重启计算机
    禁止用户关闭计算机
    将计算机设置为休眠状态
    java正则表达式
    JSONArray排序和倒转
    head first 设计模式笔记8-模板方法模式
  • 原文地址:https://www.cnblogs.com/huxiaobai/p/10500860.html
Copyright © 2011-2022 走看看