#include <iostream>
#include <algorithm>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
const int maxn = 1005;
const int INF = 1e9 + 7;
class linklist {
private :
int length;
int tot;
int head;
int tail;
int pre[maxn] = {0};
int nexT[maxn] = {0};
int key[maxn] = {0};
public :
linklist ();
int insert (int number);
int first ();
int last ();
int size ();
void vis ();
int delet (int pos);
int find (int pos);
bool check (int var);
};
linklist :: linklist () {
length = 0;
head = tail = 0;
tot = 0;
memset (key,0,sizeof (key));
memset (pre,0,sizeof (pre));
memset (nexT,0,sizeof(nexT));
}
int linklist:: insert (int number) {
length ++;
tot ++;
if (tot == maxn) return -INF;
int temp = tail;
tail ++;
nexT[temp] = tail;
pre[tail] = temp;
key[tail] = number;
return 1;
}
int linklist:: delet(int pos) {
if (pos > length) {
return INF;
}
if (pos == length) {
int temp = tail;
int ans = key[temp];
tail = pre[tail];
nexT[tail] = 0;
pre[temp] = 0;
length --;
return ans;
}
int temp = head;
for (int i = 1;i < pos; ++ i) {
temp = nexT[temp];
}
int temp1 = nexT[temp];
int ans = key[nexT[temp]];
nexT[temp] = nexT[nexT[temp]];
pre[nexT[nexT[temp]]] = temp;
key[temp1] = 0,nexT[temp1] = 0,pre[temp1] = 0;
length --;
return ans;
}
int linklist:: first() {
if (length == 0) return INF;
return key[nexT[head]];
}
int linklist:: size () {
return length;
}
int linklist:: last() {
if (length == 0) return INF;
return key[tail];
}
void linklist:: vis () {
int temp = head;
while (temp != tail) {
temp = nexT[temp];
cout << key[temp] << ' ';
}
cout << endl;
}
int linklist:: find (int pos) {
if (pos > length) return INF;
int temp = head;
for (int i = 0;i < pos; ++ i) {
temp = nexT[temp];
}
return key[temp];
}
bool linklist:: check(int cnt) {
if (cnt == INF) {
cout << "This is an illegal operation" << endl;
return false;
}
if (cnt == -INF) {
cout << "This linklist is full,and you must create another one." << endl;
return false;
}
return true;
}
int main () {
ios_base :: sync_with_stdio(false);
linklist List = linklist();
cout << List.size() << endl;
for (int i = 1;i <= 10; ++ i) {
int state = List.insert(i);
List.check(state);
}
cout << List.size() << endl;
List.vis();
int res = List.delet(3);
List.check(res);
cout << res << endl;
List.vis();
res = List.delet(105);
List.check(res);
return 0;
}
C++ oop 作业
最新推荐文章于 2024-05-29 19:54:41 发布