今天将之前所学习的链表进行封装,增加一些操作,重载输入,输出运算符。
一、概念
结点:数据元素的存储映像
链表:n个结点链接成起来形成一个链表,即为线性表的 链式存储结构
单链表: 结点中只包含一个指针域
头指针:指向链表中第一个结点(或为头结点、或为首元结点)的指针
头结点:在链表的首元结点之前附设的一个结点;数据域内只放表长等信息,它不计入表
长度。其作用是统一空表、和非空链表的形式
首元结点:指链表中存储线性表第一个数据元素a1的结点
二、封装链表类
#pragma once
#include<iostream>
#include<vector>
using namespace std;
struct node
{
int val;
struct node* next;
};
class ListNode
{
public:
ListNode()
:head(new node)
{
head->next = NULL;
}
void frontinsert(int data); //头插
void backinsert(int data); //尾插
void popfront(); //头删
void popback(); //尾删
void DeleteNode(int data);//删除指定结点
void reverse(); //反转链表
void frontinput(); //头插法输入
void backinput(); //尾插法输入
int GetSum(); //获取链表长度
void BubbleSort(); //链表按照冒泡排序的方法进行排序
friend istream& operator>>(istream& _cin, ListNode& list)
{
list.backinput();
return _cin;
}
friend ostream& operator<<(ostream& _cout,ListNode& list)
{
node* cur = list.head->next;
while (cur != NULL)
{
cout << cur->val << "->";
cur = cur->next;
}
cout << "NULL"<<endl;
return _cout;
}
friend ostream& operator<<