单链表的c++实现

单链表的c++实现,第1张

概述本文章向大家介绍单链表的c++实现,主要包括单链表的c++实现使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

#include

using namespace std;

template

struct Node //结点定义

{

T data;

Node *next;

};

template

class linkList

{

Node *head;

public:

linkList(); //不含参数构造

linkList(T a[],int i);//含参

~linkList(); // 析构函数

int Listlength();//求长度

T get(int i);//按位查找

int locate(T x);//按值查找

voID Insert(int i,T item);//插入数据

T Delete(int i); //删除数据

voID output();//输出

voID clear();//清空

};

template

linkList::linkList()

{

head = new Node;

head->next = NulL;

}

template

linkList::linkList(T a[],int i)

{

head = new Node;

Node *p = head;

for (int j = 0; j < i; j++)

{

Node *s = new Node;

s->data = a[j];

p->next = s;

p = s;

}

p->next = NulL;

}

template

linkList::~linkList()

{

Node *p = head;

while (p)

{

Node *q = p;

p = p->next;

delete q;

}

head = NulL;

}

template

int linkList::Listlength()

{

int sum = 0;

Node *p = head->next;

while (p)

{

p = p->next;

sum++;

}

return sum;

}

template

T linkList::get(int i)

{

Node *p = head->next;

while (--i && p)

{

p = p->next;

}

if (!p || i < 0)

{

cout << "位置非法" << endl;

exit(1);

}

else

return p->data;

}

template

int linkList::locate(T x)

{

Node *p = head->next;

int i = 1;

while (p)

{

if (p->data == x)

return i;

p = p->next;

i++;

}

exit(1);

}

template

voID linkList::output()

{

Node *p = head->next;

while (p)

{

cout << p->data << " ";

p = p->next;

}

}

template

T linkList::Delete(int n)//删除数据

{

Node *p = head;

int j = 0;

while (p&&j < n - 1)//找到第i-1个结点的位置

{

p = p->next;

j++;

}

if (!p || !p->next)//位置合法性

{

cout << "错误位置" << endl;

exit(1);

}

else

{

Node *q = p->next;

int x = q->data;

p->next = q->next;

delete q;

return x;

}

}

template

voID linkList::Insert(int i,T item)

{

Node *p = head;

int j = 0;

while (p&&j < i - 1)

{

p = p->next;

j++;

}

if (!p)

{

cout << "插入位置非法";

exit(1);

}

else

{

Node *s = new Node;//生成元素值为item的新结点

s->data = item;

s->next = p->next;//用后插法将s插入到结点p的后面

p->next = s;

}

}

template

voID linkList::clear()

{

Node *p = head;

while (p)

{

Node *q = p;

p = p->next;

delete q;

}

head = NulL;

}

int main()

{

int a[5] = { 1,2,3,4,5 };

cout << "初始化一个链表" << endl;

linkList x(a,5);

x.output();

cout << endl;

cout << "在第一个位置插入元素 0" << endl;

x.Insert(1,0);

x.output();

cout << endl;

cout << "删除第二个位置的元素" << endl;

x.Delete(2);

x.output();

cout << endl;

cout << "查找元素 3" << endl;

cout<<"元素3的位置为:"<

x.clear();//清空

system("pause");

return 0;

}

测试结果:


总结

以上是内存溢出为你收集整理的单链表的c++实现全部内容,希望文章能够帮你解决单链表的c++实现所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1264349.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-08
下一篇 2022-06-08

发表评论

登录后才能评论

评论列表(0条)

保存