2020-10-07

C++数据结构

线性表链式结构的实现与操作

请你定义一个链表,可以对链表进行“在某个元素之前插入一些元素”、“删除某个位置的元素”、“查找某元素”、“获取某个位置的元素”、“遍历输出所有元素”、“求链表的长度”等操作。键盘输入一些命令,可以执行上述操作。本题中,链表元素为整数,链表的第一个元素位置为1,链表的最大长度为20。

#include
using namespace std;

struct Node
{
int data;
Node *next;
};

class Linklist
{
public:
Linklist();
int length();
void Insert(int i, int x);
void Get(int i);
void Locate(int x);
void Delete(int i);
void Printlist();
private:
Node *first;
};

Linklist::Linklist()
{
first = new Node;
first->next= NULL;
}

void Linklist::Printlist()
{
Node *p = first->next;
while(p != NULL)
{
cout << p->data;
p = p->next;
}
}

int Linklist::length()
{
Node *p = first->next;
int count = 0;
while (p != NULL)
{
p = p->next;
count++;
}
return count;
}

void Linklist::Get(int i)
{
Node *p = first;
int count = 0;
while (p != NULL && count < i)
{
p = p->next;
count++;
}
if (p == NULL)
{
cout << “位置不正确” << endl;
}
else
{
cout << p->data << endl;
}
}

void Linklist::Locate(int x)
{
Node * p = first->next;
int count = 1;
while (p != NULL)
{
if (p->data == x)
{
cout << count;
return;
}
p = p->next;
count++;
}
if (p == NULL)
{
cout << “None” << endl;
}
}

void Linklist::Insert(int i,int x)
{
Node *p = first,*s = NULL;
int count = 0;
s = new Node;
while (p != NULL && count < i-1)
{
p = p->next;
count++;
}
s->data = x;
s->next = p->next;
p->next = s;
}

void Linklist::Delete(int i)
{
int x;
Node *p = first;
Node *s = NULL;
int count = 0;
while (p != NULL && count < i-1)
{
p = p->next;
count++;
}

	s = p->next;
	x = s->data;
	p->next = s->next;
	delete s;
	cout << x;

}

int main()
{
Linklist L;
int k,x,num;
char c;
while (1)
{
cin >> c;
if (c == ‘E’)
{
break;
}
switch©
{
case ‘I’:
{
cin >> num;
for (int i = 0; i < num; i++)
{
cin >> k >> x;
L.Insert(k,x);
}
}
break;
case ‘S’:
cin >> k;
L.Locate(k);
break;
case ‘D’:
cin >> k;
L.Delete(k);
break;
case ‘G’:
cin >> k;
L.Get(k);
break;
case ‘L’:
cout << L.length();
break;
case ‘V’:
L.Printlist();
break;
}
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值