您的位置:首页 > 其它

链表游标实现

2016-11-25 16:56 232 查看
#include<stdio.h>
#include<string.h>
#include<math.h>
#include<algorithm>

const int MAX = 10;

struct node{
int num;
int next;
} CursorSpace[MAX];

void init_CursorSpace()
{
for(int i = 0; i < 9; i++)
{
CursorSpace[i].next = i + 1;
}
CursorSpace[MAX - 1].next= 0;
}

void construction()
{
for(int i = 0; i < 10; i++)
{
scanf("%d",&CursorSpace[i].num);
}
}

int Find(int number,int L)
{
int p = CursorSpace[L].next;

while(p&&CursorSpace[p].num != number)
{
p = CursorSpace[p].next;
}

return p;
}

static int Cursormalloc()
{
int p;
p = CursorSpace[0].next;
CursorSpace[0].next = CursorSpace[p].next;
return p;
}

static int Cursorfree(int p)
{
CursorSpace[p].next = CursorSpace[0].next;
CursorSpace[0].next	= p;
}

int Findprevious(int number,int L)
{
int p = L;
while(CursorSpace[p].next&&CursorSpace[CursorSpace[p].next].num != number)
{
p = CursorSpace[p].next;
}
return p;
}

void insert(int number,int L,int p)
{
int Tlic = Cursormalloc();
if(Tlic == 0)
{
printf("out of space!\n");
}
CursorSpace[Tlic].num = number;
CursorSpace[Tlic].next = CursorSpace[p].next;
CursorSpace[p].next = Tlic;
}

int IsEmpty(int L)
{
return CursorSpace[L].next == 0;
}

void del(int number,int L)
{
int Tmp;
int p = Findprevious(number,L);

if(!IsEmpty(p))
{
Tmp = CursorSpace[p].next;
CursorSpace[p].next = CursorSpace[Tmp].next;
Cursorfree(Tmp);
}
}

void print(int L)
{
int p = CursorSpace[L].next;

while(p)
{
printf("%d ",CursorSpace[p].num);
p = CursorSpace[p].next;
}
printf("\n");
}

int main(void)
{
init_CursorSpace();
int L = Cursormalloc();

CursorSpace[L].next = 0;
printf("%d\n",L);
int p = L;
int n,val;
scanf("%d",&n);
for(int i = 0; i < n; i++)
{
scanf("%d",&val);
insert(val,L,p);
p = CursorSpace[p].next;
}
print(L);

int find;
scanf("%d",&find);
printf("%d\n",Find(find,L));

int de;
scanf("%d",&de);
del(de,L);
print(L);
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: