数组模拟链表

#include
#include 
using namespace std;
int head = 0;
int last = 0;
int sum = 0;
int flag = 0;
typedef struct node {
    double up = -1;
    double down = -1;
};
vector<node> shelf(100000);
void insert(double x, int y) {
	int h = head;
	int l = last;
	if (h < 0)
		h = -h;
	if (last < 0)
		l = -l;
	if (y == 0) {   
		if (head >= 0)
			shelf[h].up = x;
		else
			shelf[h-1].down = x;
        head++;
	}
	else if (y == 1) {
		if (last < 0)
			shelf[l-1].up = x;
		else
			shelf[l].down = x;
		last++;
	}
	sum++;
}
void delet(int y) {
	if (head >= 0 && last <= 0&&head==(-last)) {
		return;
	}
	else if(head <= 0 && last >= 0 && head == (-last)) {
		return;
	} 
		
	if (y == 0) {		
		head--;				
	}
	else if (y == 1) {
		last--;
	}
	if (sum > 0) {
		sum--;
	}		
}
void showAll(double x, double y) {
	x = (int)x;
	y = (int)y;
	int h, l;
	if (x < 1)
		x = 1;
	h = head - x;
	int t = sum;
	if (h >= 0) {
		l = y - head;
		if (l >= 0) {
			for (int i = h; i >= 0; i--) {
				if (t == 0) {
					break;
				}
				cout << shelf[i].up << " ";
				
				t--;				
			}
			for (int i = 0; i < l; i++) {
				if (t == 0) {
					break;
				}
				cout << shelf[i].down << " ";
				t--;
			}
		}
		else {
			l = -l;
			for (int i = h; i >= l; i--) {
				if (t == 0) {
					break;
				}
				cout << shelf[i].up << " ";
				t--;
			}
		}		
	}
	else {
		h = -h - 1;
		l = y - x + 1;
		for (int i = h; i <= h - 1 + l; i++) {
			if (t == 0) {
				break;
			}
			cout << shelf[i].down << " ";
			t--;
		}
	}	
	printf("\n");
}
int main()
{
	int t = 0, n = 0, f;
	double m,x,y;
	scanf("%d", &t);
	for (int j = 0; j < t; j++)
	{
		head = 0;
		last = 0;
		sum = 0;
		scanf("%d", &n);
		
		for (int i = 0; i < n; i++) {
			scanf("%lf", &m);
			insert(m, 1);
		}
		scanf("%d", &n);
		for (int i = 0; i < n; i++) {
			scanf("%d", &f);
			switch (f) {
			case 1:
				scanf("%lf", &m);
				insert(m, 0);
				break;
			case 2: {
				delet(0);
				break;
			}
			case 3: {
				scanf("%lf", &m);
				insert(m, 1);
				break;
			}
			case 4: {
				delet(1);
				break;
			}
			}
		}
		cin >> x >> y;
		printf("Case #%d:\n", j + 1);
		showAll(x, y);
	}
	return 0;
}

数组模拟链表_第1张图片

你可能感兴趣的:(c++)