#include <stdio.h>
#include <stdlib.h>
#include "ConsoleApplication1.h"

// Use dynamic array to create list

#define MaxSize 100
#define AddSize 10
#define Elemtype int


typedef struct {
	Elemtype *List;
	int size;
	int length;
}SqList;

void InitList(SqList& L) {
	L.size = MaxSize;
	L.length = 0;
	L.List = (Elemtype*)malloc(MaxSize * sizeof(Elemtype));
}

void DestoryList(SqList& L) {
	L.size = 0;
	L.length = 0;
	free(L.List);
}

void ClearList(SqList& L) {
	L.length = 0;
}

int IsEmpty(SqList L) {
	if (L.length == 0)
		return true;
	else
		return false;
}

int ListLength(SqList L) {
	return L.length;
}

int GetElem(SqList L, int i, Elemtype& e) {
	if (i < 0) {
		printf("THE ILLEGAL INPUT,YOU CAN'T INPUT NEGATIVE INDEX\n");
		return false;
	}
	if (i >= ListLength(L)) {
		printf("YOUR INPUT EXCEEDS THE LIST'S LENGTH\n");
		return false;
	}
	e = L.List[i];
	return true;
}

int LocateElem(SqList L, Elemtype e) {
	for (int i = 0; i < ListLength(L); i++)
	{
		if (L.List[i] == e)
			return i;
	}
	return -1;
}

int PriorElem(SqList L, Elemtype cur, Elemtype& prior) {
	int PriorIndex = LocateElem(L,cur) - 1;
	if (PriorIndex == -2) {
		printf("Don't Exist the Element\n");
		return false;
	}
	if (PriorIndex == -1) {
		printf("The Element index is ONE,Don't Exist the Prior Element\n");
		return false;
	}
	prior = L.List[PriorIndex];
	return true;
}

int NextElem(SqList L, Elemtype cur, Elemtype& next) {
	int CurrentIndex = LocateElem(L, cur);
	if (CurrentIndex == -1) {
		printf("Don't Exist the Element\n");
		return false;
	}
	if (CurrentIndex + 1 == ListLength(L)) {
		printf("The Element index is THE LAST,Don't Exist the NEXT Element\n");
		return false;
	}
	next = L.List[CurrentIndex + 1];
	return true;
}

int ListInsert(SqList& L, int i, Elemtype e) {
	
	if (i < 0) {
		printf("ILLEGAL INPUT,YOU PUT INDEX IS LESS THAN ZERO\n");
		return false;
	}
	if (i > ListLength(L)) {
		printf("THE INDEX IS TOO BIG FOR INSERTING NOW\n");
		return false;
	}
	if (L.size == L.length) {
		L.List = (Elemtype*)realloc(L.List, AddSize * sizeof(Elemtype));
		if (L.List == NULL) {
			printf("List's Size is insufficient ,and Reallocate Size Fail\n");
			return false;
		}
		L.size = L.size + AddSize;
	}
	for (int j = ListLength(L)-1; j >= i; j--)
	{
		L.List[j + 1] = L.List[j];
	}
	L.List[i] = e;
	L.length++;
	return true;
}

int ListDelete(SqList& L, int i, Elemtype& e) {
	if (i < 0) {
		printf("ILLEGAL INPUT,YOU PUT INDEX IS LESS THAN ZERO\n");
		return false;
	}
	if (i >= ListLength(L)) {
		printf("YOUR INDEX CANNOT EXIST IN THIS LIST\n");
		return false;
	}
	if (ListLength(L) == 0) {
		printf("THE LIST IS EMPTY, CAN'T DELETE ANY ELEMENT\n");
		return false;
	}
	e = L.List[i];
	for (int j = i+1; j < ListLength(L); j++)
	{
		L.List[j - 1] = L.List[j];
	}
	L.length--;
}

void Visit(int i) {
	printf("%d ",i);
}

int ListTravel(SqList L) {
	for (int i = 0; i < ListLength(L); i++)
	{
		Visit(L.List[i]);
	}
	printf("\n");
	return 0;
}

int InputList(SqList& L, int n) {
	Elemtype e;
	if (n >= L.size) {
		printf("Your inputing numbers more than List'size,Please input less than %d number you will input\n",L.size);
		return false;
	}
	printf("Input List elements:\n");
	for (int i = 0; i < n; i++)
	{
		scanf_s("%d", &e);
		ListInsert(L, i, e);
	}
	return true;
}

// Take out the elements in La one by one and check if they exist in Lb,if exist delete it,otherwise reserve it 
void SetMinus(SqList& La, SqList Lb,int n,int m) {
	int e;
	InputList(La, n);
	InputList(Lb, m);
	for (int i = 0; i < ListLength(La); i++)
	{
		GetElem(La, i, e);
		if (LocateElem(Lb, e) != -1) {
			ListDelete(La, i, e);
			--i;
		}
	}
}
int main()
{
	SqList La,Lb;
	int m,n;
	int e;
	InitList(La);
	InitList(Lb);
	printf("Input La and Lb numbers of element:");
	scanf_s("%d %d", &n, &m);
	SetMinus(La, Lb, n, m);
	ListTravel(La);
	DestoryList(La);
	DestoryList(Lb);
	return 0;
}

  

posted on 2023-12-24 21:55  Rabbit_XIN  阅读(3)  评论(0编辑  收藏  举报