单链表的基本操作

                                                                                            单链表的基本操作

//节点的定义

typedef struct LINKNODE 

{

int info;  //存储信息

struct LINKNODE * next;

}LinkNode;

 

//链表的定义

class LinkList 

{

private:

LinkNode *head;

int size;

 

public:

LinkList();  //构造函数

~LinkList();  //析构函数

void *init();  //链表初始化

void Insert(LinkList *list,  int pos, int data);  //插入

void first(LinkList *list);  //返回第1个节点

void del(LinkList *list, int pos);  //删除

int Find(LinkList *list, int data);  //查找

int length(LinkList *list);  //长度

void print(LinkList *list);  //打印

 

int InsertPrint();  

int DelPrint();  

int FourteenPrint(); 

int FiftyPrint();  

};

 

LinkList::LinkList() {}  //构造函数

 

LinkList::~LinkList()  //析构函数(销毁链表)

{

LinkNode *P = head;

while (head)

{

P = head;

head = head->next;

delete(P);

}

}

void *LinkList::init()  //链表初始化

{

LinkList *list = (LinkList*)malloc(sizeof(LinkList));  //申请链表内存

list->size = 0;

list->head = (LinkNode*)malloc(sizeof(LinkNode));  //申请节点内存

list->head->info = NULL;

list->head->next = NULL;

 

return list;

}

 

 

void LinkList::Insert(LinkList *list, int pos, int data)  //插入(pos是位置)

{

if (list == NULL)

{

return;

}

 

if (data == NULL)

{

return;

}

 

if (pos < 0 || pos > list->size)  //pos位置越界的时候,把节点从尾部插入

{

pos = list->size;  

}

 

LinkNode *NewNode = (LinkNode*)malloc(sizeof(LinkNode));  //创建新的节点

NewNode->info = data;

NewNode->next = NULL;

 

LinkNode *pCurrent = list->head;

for (int i = 0; i < pos; i++)  //根据pos找出插入节点的位置 ( i 是数位置,i 根据pos数值对应next指针)

{

pCurrent = pCurrent->next;  //移动节点

}

 

NewNode->next = pCurrent->next;  //新节点插入链表

pCurrent->next = NewNode;  //将NewNode本身的地址赋给pCurrent指向的下一个地址

list->size++;  //链表的长度增加

}

 

 

void LinkList::first(LinkList *list)  //返回第一个节点

{

cout << "节点第一:" << list->head->next->info << endl << endl;

return;

}

 

 

void LinkList::del(LinkList *list, int pos)  //删除(pos是位置)

{

if (list == NULL)

{

return;

}

 

if (pos < 0 || pos >= list->size)

{

return;

}

 

LinkNode *pCurrent = list->head;

for (int i = 0; i < pos; i++)  //根据pos查找删除节点的地址

{

pCurrent = pCurrent->next;

}

 

LinkNode *pDel = pCurrent->next;

pCurrent->next = pDel->next;  //删除节点后,把后面的节点接上去

 

delete(pDel); 

 

list->size--;

}

 

 

int LinkList::Find(LinkList *list, int data)  //查找

{

if (list == NULL)

{

return -1;

}

 

if (data == NULL)

{

return -1;

}

 

LinkNode *pCurrent = list->head->next;  //遍历查找从头指针开始

int i = 0;

while (pCurrent != NULL)  //遍历查找

{

if (pCurrent->info == data)

{

break;

}

i++;

pCurrent = pCurrent->next;

}

 

if (i < list->size)

{

cout << "查找成功!节点的位置是“ " << i << " ” " << endl << endl;

}

else

{

cout << "查找失败!节点不存在。" << endl << endl;

}

 

return i;

}

 

 

int LinkList::length(LinkList *list)  //长度

{

cout << "链表长度:" << list->size << endl << endl;

return -1;

}

 

 

void LinkList::print(LinkList *list)  //打印

{

if (list == NULL)

{

return;

}

 

LinkNode * pCurrent = list->head->next;

cout << "链表打印:";

while (pCurrent != NULL)

{

cout << pCurrent->info << " ";

pCurrent = pCurrent->next;

}

cout << endl << endl;  //换行

}

 

 

 

int LinkList::InsertPrint()  //打印节点插入的提示信息

{

cout << "节点插入:" << "1 2 3 4 5 6" << endl << endl;

return 0;

}

 

int LinkList::DelPrint()  //打印节点删除的提示信息

{

cout << "节点删除:6" << endl << endl;

return 0;

}

 

int LinkList::FourPrint()  //打印4节点查找的提示信息

{

cout << "节点查找:“ 4 ”" << endl << endl;

return 0;

}

 

int LinkList::TenPrint()  //打印10节点查找的提示信息

{

cout << "节点查找:“ 10 ”" << endl << endl;

return 0;

 

#include <iostream>

using namespace std;

void main()

{

LinkList L;  //实例化

LinkList *list = (LinkList*)L.init();

 

L.InsertPrint();  //打印节点插入的提示信息

L.Insert(list, 0, 1);  //根据0、1、2、3、4、5的位置插入节点

L.Insert(list, 1, 2);

L.Insert(list, 2, 3);

L.Insert(list, 3, 4);

L.Insert(list, 4, 5);

L.Insert(list, 5, 6);

 

L.first(list);  //返回第一个节点

L.DelPrint();  //打印节点删除的提示信息

L.del(list, 5);  //删除位置为“ 5 ”的节点“ 6 ”

L.FourPrint();  //打印4节点查找的提示信息

L.Find(list, 4);  //查找(成功)

L.TenPrint();  //打印10节点查找的提示信息

L.Find(list, 10);  //查找(失败)

L.length(list);  //长度

L.print(list);  //打印

}

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值