用类封装一个单链表
#include<iostream>
#include<conio.h>
using namespace std;
//封装一个单链表
typedef struct node
{
int id;//当成数据域
struct node* next;//指针域 用来指向下一个节点 和结构体变量的功能差不多
}NODE;
class CList
{
NODE* head;//头节点 不要放在公有下面
public:
//初始化头节点
CList()
{
//实现一个头节点给head指针
head = (NODE*)malloc(sizeof(NODE));//这句话相当于在堆区定义了一个结构体变量
head->id = 0;
head->next = NULL;
}
//插入数据
void insert(int data)
{
NODE* p = (NODE*)malloc(sizeof(NODE));
p->id = data;//创建节点并接收数据
//链表链接
p->next = head->next;
head->next = p;
}
//正序输出
void print()
{
NODE* p = head->next;//指向的是第一个有数据的节点
while (p != NULL)
{
printf("%d\n", p->id);
p = p->next;
}
}
//查
void find(int val)
{
NODE* p = head->next;
for (int i = 1; p != NULL; i++)
{
if (p->id == val)
{
printf("你要找的值在第%d个,值为%d\n", i, p->id);
return;
}
p = p->next;//p指向下一个节点
}
}
//删除操作
void del(int data)
{
printf("进去了\n");
NODE* p1 = head->next;//指向第一个有数据的节点
NODE* p2 = head;
while (p1 != NULL)
{
if (p1->id == data)
{
p2->next = p1->next;
free(p1);
return;//需要加一个return;不然的话程序结束之后会出问题
}
p1 = p1->next;
p2 = p2->next;
}
}
//改操作
void change(int data)
{
NODE* p = head->next;
while (p != NULL)
{
if (p->id == data)
{
p->id = 666;
return;
}
p = p->next;
}
}
~CList()
{
if (head != NULL)
{
delete head;
head = NULL;
}
}
};
int main()
{
CList list;
for (int i = 0; i < 5; i++)
{
list.insert(1 + i);
}
//print(head);
list.find(5);
//del(head, 4);
//print2(head);
list.change(2);
list.print();
return 0;
}
版权声明:本文为m0_56698045原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。