#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define SpaceSize 1500/*内存池容量*/
#define _NormalMake_/*正常输入元素,相对随机而言*/
//#undef _NormalMake_
#define N 100 /*随机元素个数*/
typedef int ElemType;
typedef int PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Pos;
struct Node{
ElemType data;
Pos next;
} CurSpace[SpaceSize];
void ERROR(char *ch){
puts(ch);
exit(0);
}
void InitCurSpace(){
for (int i = 0; i != SpaceSize; ++i){
CurSpace[i].next = i + 1;
}
CurSpace[SpaceSize - 1].next = 0;
}
static Pos
CurMalloc(){
Pos p;
p = CurSpace[0].next;
if (0 == p)
ERROR("Out of space!");
CurSpace[0].next = CurSpace[p].next;
return p;
}
static void
CurFree(Pos p){
CurSpace[p].next = CurSpace[0].next;
CurSpace[0].next = p;
}
List MakeEmpty(){
List L;
L = CurMalloc();
CurSpace[L].next = 0;/出过错误
return L;
}
int IsEmpty(List L){
return 0 == CurSpace[L].next;
}
int IsLast(Pos p){
return 0 == CurSpace[p].next;
}
Pos Find(ElemType e, List L){
Pos p;
p = CurSpace[L].next;
while (CurSpace[p].data != e&&p)
p = CurSpace[p].next;
return p;
}
Pos FindPre(ElemType e, List L){
Pos p;
p = L;//出错
while (!IsLast(p) && CurSpace[CurSpace[p].next].data != e)
p = CurSpace[p].next;
return p;
}
void DeleteElem(ElemType e, List L){
Pos p,TemCell;
p = FindPre(e, L);
if (!IsLast(p)){
TemCell = CurSpace[p].next;
CurSpace[p].next = CurSpace[TemCell].next;
CurFree(TemCell);
}
}
void InsertElem(ElemType e, Pos p){
Pos TemCell;
TemCell = CurMalloc();
CurSpace[TemCell].data = e;
CurSpace[TemCell].next = CurSpace[p].next;
CurSpace[p].next = TemCell;
}
void DeleteCurList(List L){
Pos p, TemCell;
p = CurSpace[L].next;
CurSpace[L].next = 0;
while (p){
TemCell = CurSpace[p].next;
CurFree(p);
p = TemCell;
}
}
void GetElemSeries(int array[N]){
srand((unsigned)time(NULL));
for (int i = 0; i != 100; ++i){
array[i] = rand() % 100;
}
}
List MakeCurList(){
List L;
Pos p;
p=L = MakeEmpty();
#ifdef _NormalMake_
ElemType e;
puts("请输入表0结束:");
scanf("%d", &e);
while (e){
InsertElem(e, p);
p = CurSpace[p].next;
scanf("%d", &e);
}
#else
//int array[N];
int *array = malloc(sizeof(int)*N);
GetElemSeries(array);
for (int i = 0; i != N; i++){
InsertElem(array[i], p);
p = CurSpace[p].next;
}
#endif
return L;///
}
void PrintCurList(List L){
Pos p;
if (IsEmpty(L))
ERROR("\nEmpty List!");
p = CurSpace[L].next;
puts("\n表如下");
while (p){
printf("%d ", CurSpace[p].data);
p = CurSpace[p].next;
}
}
void DeleteSerial(List L){
#ifdef _NormalMake_
ElemType e;
puts("\n输入删除的元素0结束");
scanf("%d", &e);
while (e){
DeleteElem(e, L);
scanf("%d", &e);
}
#else
int array[N];
GetElemSeries(array);
for (int i = 0; i != N/2; i++){
DeleteElem(array[i], L);
}
#endif
}
int main(){
List L1,L2;
InitCurSpace();
L1 = MakeCurList();
PrintCurList(L1);
DeleteSerial(L1);
PrintCurList(L1);
DeleteCurList(L1);
//PrintCurList(L1);
L2 = MakeCurList();
PrintCurList(L2);
DeleteSerial(L2);
//PrintCurList(L1);
PrintCurList(L2);
DeleteCurList(L2);
PrintCurList(L2);
return 0;
}/*全通过验证无空间*/
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define SpaceSize 1500/*内存池容量*/
#define _NormalMake_/*正常输入元素,相对随机而言*/
//#undef _NormalMake_
#define N 100 /*随机元素个数*/
typedef int ElemType;
typedef int PtrToNode;
typedef PtrToNode List;
typedef PtrToNode Pos;
struct Node{
ElemType data;
Pos next;
} CurSpace[SpaceSize];
void ERROR(char *ch){
puts(ch);
exit(0);
}
void InitCurSpace(){
for (int i = 0; i != SpaceSize; ++i){
CurSpace[i].next = i + 1;
}
CurSpace[SpaceSize - 1].next = 0;
}
static Pos
CurMalloc(){
Pos p;
p = CurSpace[0].next;
if (0 == p)
ERROR("Out of space!");
CurSpace[0].next = CurSpace[p].next;
return p;
}
static void
CurFree(Pos p){
CurSpace[p].next = CurSpace[0].next;
CurSpace[0].next = p;
}
List MakeEmpty(){
List L;
L = CurMalloc();
CurSpace[L].next = 0;/出过错误
return L;
}
int IsEmpty(List L){
return 0 == CurSpace[L].next;
}
int IsLast(Pos p){
return 0 == CurSpace[p].next;
}
Pos Find(ElemType e, List L){
Pos p;
p = CurSpace[L].next;
while (CurSpace[p].data != e&&p)
p = CurSpace[p].next;
return p;
}
Pos FindPre(ElemType e, List L){
Pos p;
p = L;//出错
while (!IsLast(p) && CurSpace[CurSpace[p].next].data != e)
p = CurSpace[p].next;
return p;
}
void DeleteElem(ElemType e, List L){
Pos p,TemCell;
p = FindPre(e, L);
if (!IsLast(p)){
TemCell = CurSpace[p].next;
CurSpace[p].next = CurSpace[TemCell].next;
CurFree(TemCell);
}
}
void InsertElem(ElemType e, Pos p){
Pos TemCell;
TemCell = CurMalloc();
CurSpace[TemCell].data = e;
CurSpace[TemCell].next = CurSpace[p].next;
CurSpace[p].next = TemCell;
}
void DeleteCurList(List L){
Pos p, TemCell;
p = CurSpace[L].next;
CurSpace[L].next = 0;
while (p){
TemCell = CurSpace[p].next;
CurFree(p);
p = TemCell;
}
}
void GetElemSeries(int array[N]){
srand((unsigned)time(NULL));
for (int i = 0; i != 100; ++i){
array[i] = rand() % 100;
}
}
List MakeCurList(){
List L;
Pos p;
p=L = MakeEmpty();
#ifdef _NormalMake_
ElemType e;
puts("请输入表0结束:");
scanf("%d", &e);
while (e){
InsertElem(e, p);
p = CurSpace[p].next;
scanf("%d", &e);
}
#else
//int array[N];
int *array = malloc(sizeof(int)*N);
GetElemSeries(array);
for (int i = 0; i != N; i++){
InsertElem(array[i], p);
p = CurSpace[p].next;
}
#endif
return L;///
}
void PrintCurList(List L){
Pos p;
if (IsEmpty(L))
ERROR("\nEmpty List!");
p = CurSpace[L].next;
puts("\n表如下");
while (p){
printf("%d ", CurSpace[p].data);
p = CurSpace[p].next;
}
}
void DeleteSerial(List L){
#ifdef _NormalMake_
ElemType e;
puts("\n输入删除的元素0结束");
scanf("%d", &e);
while (e){
DeleteElem(e, L);
scanf("%d", &e);
}
#else
int array[N];
GetElemSeries(array);
for (int i = 0; i != N/2; i++){
DeleteElem(array[i], L);
}
#endif
}
int main(){
List L1,L2;
InitCurSpace();
L1 = MakeCurList();
PrintCurList(L1);
DeleteSerial(L1);
PrintCurList(L1);
DeleteCurList(L1);
//PrintCurList(L1);
L2 = MakeCurList();
PrintCurList(L2);
DeleteSerial(L2);
//PrintCurList(L1);
PrintCurList(L2);
DeleteCurList(L2);
PrintCurList(L2);
return 0;
}/*全通过验证无空间*/