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("請你個用戶選擇鏈表元素的類型:\n1.整型  \n2.字符型 \n3.浮點型 \n4.字符串");
	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數據類型進行改寫了,這實在是有點爽哦。

主要還是不知道具體老師讓寫的題目具體是什么,總之,在多態和虛函數中沒有在代碼中體現出來,這就有點惱火。

嗨呀,加油吧!!!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM