• C++类模板实现对链表进行操作


    /*动态数组 使用链表实现*/
    #include <stdio.h>
    #include <stdlib.h>
    #include <iostream>
    using namespace std;
    
    void menu();
    template <class T>
    class Link_Array
    {
    typedef struct node
    {
        T data;
        struct node*next;
    }Node;
    
    public:
    	Link_Array()
    	{
    		length = 0;
            head = NULL;
            temp = NULL;
    	}
    	void input()//数组中元素的输出
    	{
    		Node*pr = head;
            cout<<"当前数组中共有"<<length<<"个元素"<<endl;
            cout<<"数组中的元素有:";
            while(pr != NULL)
            {
                cout<<pr->data<<"->";
                pr = pr->next;
            }
            cout<<"NULL";
    	}
    	void add()//添加元素
    	{
            T num;
            Node*pr = NULL;
            cout<<"请输入你要添加的元素:";
            cin>>num;
            pr = new Node;
            pr->data = num;
            if(head == NULL)head = pr;
            else temp->next = pr;
            temp = pr;
            temp->next = NULL;
            length++;
            cout<<"元素插入成功!!!"<<endl;
        }
    	void del()//删除元素
    	{
            int position,counter = 0;
            Node*pr = head,*p = NULL;
            cout<<"请输入元素的位置编号(1-"<<length<<"),以便于做删除操作.";
            cin>>position;
            if(position < 1 || position > length)cout<<"你输入的位置不存在!!!"<<endl;
            else
            {
               while(counter <= position-1)
               {
                   p = pr;
                   pr = pr->next;
                   counter++;
               }
               p->next = pr->next;
               delete pr;
            }
            cout<<"元素删除成功!!!"<<endl;
    	}
    	void change()//按照位置修改元素
    	{
    		Node*pr = head;
            int position,num,counter = 0;
            cout<<"请输入元素的位置编号(1-"<<length<<"),以便于做修改操作.";
            cin>>position;
            if(position < 1 || position > length)cout<<"你输入的位置不存在!!!"<<endl;
            else
            {
                cout<<"请输入修改后的数字:";
                cin>>num;
                while(counter < position-1)
                {
                    pr = pr->next;
                    counter++;
                }
                pr->data = num;
                cout<<"元素修改成功!!!"<<endl;
            }
    	}
    
    	void insert()//插入元素
    	{
    		Node*pr = head,*p = NULL;
            int position,num,counter = 1;
            cout<<"请输入元素的位置编号(1-"<<length<<"),以便于做插入操作.";
            cin>>position;
            cout<<"请输入插入元素的元素值:";
            cin>>num;
            if(position < 1 || position > length)cout<<"你输入的位置不存在!!!"<<endl;
            else
            {
                p = new Node;
                p->data = num;
                while(counter < position-1)
                {
                    pr = pr->next;
                    counter++;
                }
                p->next = pr->next;
                pr->next = p;
                cout<<"元素插入成功!!!"<<endl;
            }
    	}
    	void main1(Link_Array arr)
    	{
    	    int ch;
    		menu();
    		while(1)
    		{
    			cout<<"请输入你的选项";
    			cin>>ch;
    			if(ch==6)
    			{
    				exit(0);
    			}
    			else
    			{
    			switch (ch)
    			{
                    case 1:
                        arr.add();
                        break;
                    case 2:
                        arr.del();
                        break;
                    case 3:
                        arr.change();
                        break;
                    case 4:
                        arr.insert();
                        break;
                    case 5:
                        arr.input();
                        break;
    			}
    			}
    		}
    	}
    private:
    	int length = 0;
    	struct node*head;
           struct node*temp;
    };
    
    void menu()
    {
    	cout<<"1.   添加元素   "<<endl;
    	cout<<"2.   删除元素   "<<endl;
    	cout<<"3.   修改元素   "<<endl;
    	cout<<"4.   插入元素   "<<endl;
    	cout<<"5.   输出元素   "<<endl;
    	cout<<"6.   退出系统   "<<endl;
    }
    int main()
    {
    	int x;
    	Link_Array<int> arr;
    	Link_Array<char> arr2;
    	Link_Array<double> arr3;
    	Link_Array<string> arr4;
    	printf("请你个用户选择链表元素的类型:
    1.整型  
    2.字符型 
    3.浮点型 
    4.字符串");
    	scanf("%d",&x);
    	switch(x)
    	{
    	case 1:
    		arr.main1(arr);
    		break;
    	case 2:
    		arr2.main1(arr2);
    		break;
    	case 3:
    		arr3.main1(arr3);
    		break;
        case 4:
            arr4.main1(arr4);
    		break;
    	}
    	return 0;
    }
    

     将原来的对动态数组的操作改为了对链表的操作,省去了数组空间的扩充,还有减掉了对数组运算符重载的使用,。

    使用到了数据结构中的链表,C++中的类模板,大概就是这样吧。

    主要的是当我将链表节点的结构体放入类class Link_Array的时候我的类模板T一下子就可以对链表节点中的data数据类型进行改写了,这实在是有点爽哦。

    主要还是不知道具体老师让写的题目具体是什么,总之,在多态和虚函数中没有在代码中体现出来,这就有点恼火。

    嗨呀,加油吧!!!

  • 相关阅读:
    Jquery不同版本共用的解决方案(插件编写)
    事务
    快应用开发
    编码问题
    spring事物配置,声明式事务管理和基于@Transactional注解的使用
    spring管理事务回滚
    Mysql 一条SQL语句实现批量更新数据,update结合case、when和then的使用案例
    tomcat 会话超时设置
    自动化测试基础篇--Selenium中数据参数化之TXT
    自动化测试基础篇--Selenium中JS处理浏览器弹窗
  • 原文地址:https://www.cnblogs.com/Andre/p/11985844.html
Copyright © 2020-2023  润新知