单链表实现(c++)
#include <iostream>
#include <string>
#include <cstring>
using namespace std
;
const int N
= 110;
template <typename T
>
struct node
{
T data
;
node
<T
> *next
;
};
template <typename T
>
class linklist
{
node
<T
> *first
;
public:
linklist();
linklist(T a
[], int n
);
~linklist();
int length();
int getn(T num
);
T
getp(int pos
);
T
del(int pos
);
void insert(int pos
, T num
);
void display();
};
template <typename T
>
linklist
<T
>::linklist()
{
first
= new node
<T
>;
first
->next
= nullptr;
}
template <typename T
>
linklist
<T
>::linklist(T a
[],int n
)
{
first
= new node
<T
>;
node
<T
> *r
= first
;
node
<T
> *s
= nullptr;
for(int i
= 1; i
<= n
; i
++)
{
s
= new node
<T
>;
s
->data
= a
[i
];
r
->next
= s
;
r
= s
;
}
r
->next
= nullptr;
}
template <typename T
>
linklist
<T
>::~linklist()
{
node
<T
> *p
= first
;
while(first
!= nullptr)
{
first
= first
->next
;
delete p
;
p
= first
;
}
}
template <typename T
>
int linklist
<T
>::length()
{
node
<T
> *p
= first
->next
;
int cnt
= 1;
while(p
!= nullptr)
{
p
= p
->next
;
cnt
++;
}
cnt
--;
return cnt
;
}
template <typename T
>
int linklist
<T
>::getn(T num
)
{
node
<T
> *p
= first
->next
;
int cnt
= 1;
while(p
!= nullptr)
{
if(p
->data
== num
)
return cnt
;
p
= p
->next
;
cnt
++;
}
if(p
== nullptr)
throw "查找值错误";
}
template <typename T
>
T linklist
<T
>::getp(int pos
)
{
node
<T
> *p
= first
->next
;
int cnt
= 1;
while(p
!= nullptr && cnt
<= pos
- 1)
{
p
= p
->next
;
cnt
++;
}
if(p
== nullptr)
throw "查找位置错误";
else
return p
->data
;
}
template <typename T
>
T linklist
<T
>::del(int pos
)
{
node
<T
> *p
= first
->next
;
node
<T
> *q
= nullptr;
T x
;
int cnt
= 1; 计数器;
while(p
!= nullptr && cnt
< pos
- 1)
{
p
= p
->next
;
cnt
++;
}
if(p
== nullptr)
throw "删除位置错误";
else
{
q
= p
->next
;
x
= q
->data
;
p
->next
= q
->next
;
delete q
;
return x
;
}
}
template <typename T
>
void linklist
<T
>::insert(int pos
, T num
)
{
node
<T
> *p
= first
->next
;
node
<T
> *s
= nullptr;
int cnt
= 1;
while(p
!= nullptr && cnt
< pos
- 1)
{
p
= p
->next
;
cnt
++;
}
if(p
== nullptr || p
->next
== nullptr)
throw "插入位置错误";
else
{
s
= new node
<T
>;
s
->data
= num
;
s
->next
= p
->next
;
p
->next
= s
;
}
}
template <typename T
>
void linklist
<T
>::display()
{
node
<T
> *p
= first
->next
;
while(p
!= nullptr)
{
cout
<< p
->data
<< " ";
p
= p
->next
;
}
}
int main()
{
int a
[N
];
memset(a
,0,sizeof(a
));
for(int i
= 1; i
<= 5; i
++)
a
[i
] = i
;
linklist
<int> A(a
,5);
cout
<< A
.length() << endl
;
cout
<< A
.getp(3) << endl
;
cout
<< A
.getn(5) << endl
;
cout
<< A
.del(5) << endl
;;
A
.insert(4,111);
A
.display();
return 0;
}
转载请注明原文地址: https://lol.8miu.com/read-7130.html