#include<iostream>
#include<cstdlib>
using namespace std;
struct node
{
int data;
node* next;
};
class list
{
node* head;
public:
list()
{
head = new node;
head->next = nullptr;
}
int get(int i);
bool empty() { return (head->next == nullptr); }
void create(int a[], int n);
node* locate(int e);
~list();
void insert(int x, int i);
int Delete(int i);
void clear();
};
int list::get(int i)
{
if (head->next == nullptr) { cout << "链表为空" << endl; exit(0); }
else
{
node* p = head;
int k=0;
while (p && k < i)
{
p = p->next;
k++;
}
if (!p || k > i) { cout << "第" << i << "个元素不存在" << endl; exit(0); }
return (p->data);
}
}
void list::insert(int x, int i)
{
node* p = head;
int k = 0;
while (p && k < i - 1)
{
p = p->next;
k++;
}
if (!p || k > i - 1)
{
cout << "第" << "i-1个元素不存在" << endl;
exit(0);
}
node* s = new node;
if (!s) { cout << "空间分配失败" << endl; exit(0); }//一定要考虑空间分配失败的情况,否则会提示“取消对NULL指针的引用
s->data = x;
s->next = p->next;
p->next = s;
}
int list::Delete(int i)
{
node* p = head;
int k = 0;
while (p && k < i - 1)
{
p = p->next;
k++;
}
if (!p || p->next == nullptr)
{
cout << "删除位置非法" << endl;//不能删除一个本来就没有的变量
exit(0);
}
node* q ;
if (!q) { cout << "空间分配失败" << endl; exit(0); }//考虑空间分配失败的情况
q = p->next;
q = p->next;
int e = q->data;
p->next = q->next;
delete q;
return e;
}
void list::create(int a[], int n)//从头部插入建立单链表,最终实现链表从0到n-1的排序
{
node* p;
for (int i = n - 1; i = 0; i--)
{
p = new node;
p->data = a[i];
p->next = head->next;
head->next = p;
}
}
void list::create(int a[], int n)
{
node* p,*q;
q = head;
for (int i = 0; i < n; i++)
{
p = new node;
p->data = a[i];
p->next = q->next;
q->next = p;
q = p;
}
}
node* list::locate(int e)
{
node* p;
p = head->next;
while (p)
{
if (p->data == e)
return p;
else
p = p->next;
}
return NULL;
}
void list::clear()
{
node* p, * q;
p = head->next;
while (p)
{
q = p;
p = p->next;
delete q;
}
head->next = NULL;
}
list::~list()
{
node* p;
p = head;
while (p)
{
p = p->next;
delete head;
head = p;
}
}
int main()
{
return 0;
}
单链表相关的最基本的函数用法
最新推荐文章于 2020-04-05 01:56:39 发布