#include<stdio.h>
#include<stdlib.h>
#define n 10
#define INVALID_LINK -2 //无效的连接
#define NULL_LINK -1 // 结尾的连接
int a[n][2];
int head = NULL_LINK;
void addNode(int data);
void delNode(int data);
int findNode(int data);
void inverse(void);
int main()
{
int d[n]={11,32,43,24,35,56,57,68,69,90};
int i,ret;
for (i=0;i<n;i++)
a[i][0]=0;
for (i=0;i<n;i++)
a[i][1]=INVALID_LINK;
// printf("%d/n",head);
printf(" Input Data : ");
for (i=0;i<n;i++)
{
printf("%d ",d[i]);
addNode(d[i]);
}
printf("/n");
for (i=0;i<n;i++)
{
printf("%d: %d ",i,a[i][0]);
printf("%d /n",a[i][1]);
}
printf("/n");
printf("head: %d/n",head);
printf(" Data in LinkList :");
i=head;
do
{
if(i==NULL_LINK)
break;
printf("%d: %d ",i,a[i][0]);
i=a[i][1];
}while ((i!=NULL_LINK));
printf("/n");
printf(" Inverse Data in LinkList : ");
inverse();
i=head;
do
{
if (i==NULL_LINK)
break;
printf("%d ",a[i][0]);
i=a[i][1];
}while((i!=NULL_LINK));
printf("/n");
//while((i!=INVALID_LINK)&&(i!=NULL_LINK));
ret=findNode(d[4]);
if(ret==NULL_LINK)
printf(" %d is not find /n",d[4] );
else
printf("Find %d from queue => array index %d /n",d[4],ret);
printf("Delete Data from queue ");
for (i=0;i<n;i=i+2)
{
printf(" %d ",d[i]);
delNode(d[i]);
}
printf("/n");
printf(" Data in LinkList :");
i=head;
do
{
if (i==NULL_LINK)
break;
printf("%d ",a[i][0]);
i=a[i][1];
}while ((i!=NULL_LINK));
printf("/n");
ret=findNode(d[4]);
if(ret==NULL_LINK)
printf(" %d is not find /n",d[4] );
else
printf("Find %d from queue => array index %d /n",d[4],ret);
system("pause");
return 0;
}
void addNode(int data)
{
int i;
if(head==NULL_LINK)
{
head=0;
a[head][0]=data;
a[head][1]=NULL_LINK;
}
else
{
for (i=0;i<n;i++)
{
if(a[i][1]==INVALID_LINK)
{
a[i][0]=data;
a[i][1]=head;
// printf("%d ",i);
head=i;
// printf("%d ",head);
return;
}
}
printf("LinkArray is Full !/n");
}
}
void delNode(int data)
{
int pre=head,ptr=head,i;
for(i=0;i<n;i++)
{
if(a[ptr][0]==data)
break;
pre=ptr;
ptr=a[ptr][1];
}
if(ptr==NULL_LINK)
printf("Node is not found!/n");
else
{
if(ptr==head)
{
head=a[ptr][1];
a[ptr][0]=0;
a[ptr][1]=INVALID_LINK;
}
else
{
a[pre][1]=a[ptr][1];
a[ptr][0]=0;
a[ptr][1]=INVALID_LINK;
}
}
}
int findNode(int data)
{
int i,ptr=head;
for(i=0;i<n;i++)
{
if(a[ptr][0]==data)
{
return ptr;
}
else
if (a[ptr][1]==NULL_LINK)
break;
ptr=a[ptr][1];
}
return NULL_LINK;
}
void inverse(void)
{
int ptr0,ptr1,ptr2;
if(head==NULL_LINK)
return;
else
{
ptr0=head;
if(a[ptr0][1]==NULL_LINK)
return ;
ptr1=a[ptr0][1];
ptr2=a[ptr1][1];
a[ptr0][1]=NULL_LINK;
do
{
a[ptr1][1]=ptr0;
ptr0=ptr1;
ptr1=ptr2;
ptr2=a[ptr1][1];
}while(ptr2!=NULL_LINK);
a[ptr1][1]=ptr0;
head=ptr1;
}
}