封装单链表

#include<iostream>
#define Status int

using namespace std;

class ListOperate
{
public:
	typedef struct Node   //单链表的定义
	{
		Status data;
		struct Node* next;
	}Node, * LinkList;
	Status GetElem(LinkList L,int i)//按位查找
	{
		if (i < 0)cout << "查值有误";
	}
	int GetElem(Status i,LinkList L)//按值查找
	{
		if (i)cout<<"查值有误";

	}
	void ListInsert(LinkList &L,int i, Status e)//插入int a插入位,e插入数
	{
		if ( i <= 0||!e)
		{
			cout << "输入值不合法"<<endl;
		}
		else
		{
			Node* p = L;
			for (; i >= 1; i--)
			{
				p = p->next;
			}
			LinkList k = (LinkList)malloc(sizeof(Node));
			if (k!= NULL)
			{
				k->data = e;
				k->next = p->next;
				p->next = k;
			}
			else
			{
				cout << "内存不足";
			}
		}
	}

	void ListDelete(LinkList &L,int i,Status &e)//删除
	{
		if (i <= 0)
		{
			cout << "输入值不合法" << endl;
		}
		else
		{
			Node* p = L;
			if (p == NULL || p->next == NULL)
			{
				cout << "输入值不合法" << endl;
			}
			else
			{
				for (; i >= 1; i--)
				{
					p = p->next;
				}
				Node* q = p->next;
				e = q->data;
				p->next = q->next;
				free(q);
				L = p;
			}
		}
	}

	void ListDelete(LinkList &L, Status e)//删除指定data为e的节点
	{
		LinkList p=L;
		if (p != NULL)
		{
			while (p->next != NULL&&p->data!=e)
			{
				p = p->next;
			}
			if (p->next != NULL)
			{
				p->data = p->next->data;
				p->next = p->next->next;
				free(p->next);
			}
		}
		L = p;
	}
	void ClearList(LinkList &L)//清空
	{
		while (L->next != NULL)
		{
			LinkList i = L;
			L = L->next;
			free(i);
		}
		free(L);
	}
	LinkList ClearListHT(int a,int t)//选择创建
	{
		ReturnList->next = NULL;//带头节点
		Status  Cout;
		cin >> Cout;
		for (; a >= 0; a--)
		{
			if (t == 0)
			{
				while (Cout)
				{
					cin >> Cout; 
					CreateListHead(Cout);	
				}
			}
			else
				//LinkList p = ReturnList;
				while (Cout)
				{
					cin >> Cout; 
					CreateListTail(Cout);	
				}
		}
		return ReturnList;
	}
private:
	LinkList ReturnList = (LinkList)malloc(sizeof(Node));
	LinkList CreateListHead(int Cout)//头插法
	{
		LinkList p = (LinkList)malloc(sizeof(Node));
		if (p != NULL)
		{
			p->data = Cout;
			p->next = ReturnList->next;
			ReturnList->next = p;
			return ReturnList;
		}
		else
		{
			cout << "内存不足";
		}
	}
	LinkList CreateListTail(Status Cout)//尾插法
	{
		LinkList p = (LinkList)malloc(sizeof(Node));
		if (p != NULL)  //现实方式和上面差不多,就不做了
		{
			p->data = Cout;
			p->next = ReturnList->next;
		}
		return ReturnList;
	}
};
int main()
{
	ListOperate a;
	ListOperate::LinkList t = a.ClearListHT(4, 0);
	a.ClearList(t);
}

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值