c语言实现的静态链表 哥们第一篇 请各位大牛多指教

来源:互联网 发布:淘宝客服兼职多少钱 编辑:程序博客网 时间:2024/04/18 13:15
#include <stdio.h>
#include <stdlib.h>


#define ElemType int
#define MAXSIZE 100


typedef struct SNode
{
ElemType elem;
int iCur;
} *Link;




ElemType InitElem( )
{
int iNum = 0;
scanf( "%d", &iNum );
return iNum;
}


void ShowElem( ElemType elem )
{
printf( "%d\n", elem );
}


int ComPare( ElemType elem1, ElemType elem2 )
{
return elem1 - elem2;
}


bool InitStaticLink( Link &link )
{
link = (Link )malloc( MAXSIZE * sizeof( SNode ) );


for( int i = 0; i < MAXSIZE - 1; ++i )
{
link[i].iCur = i + 1;
}


link[ MAXSIZE - 1 ].iCur = 0;
return true;
}


int Malloc( Link link )
{
int i = link[0].iCur;


if( i != 0 )
{
link[0].iCur = link[i].iCur;
}


return i;
}


void Free( Link link, int iPos )
{
link[iPos].iCur = link[0].iCur;
link[0].iCur = iPos;
}


void Print( Link link, int iPos )
{
if( iPos == 0 )
{
printf("Link is empty!\n");
return;
}


while( 1 )
{
ShowElem( link[iPos].elem );
if( link[iPos].iCur == 0 )
{
break;
}


iPos = link[iPos].iCur;
}
}


//功能 (A-B)U(B-A)
int Merge(Link link)
{
int iSt = Malloc( link );
if( iSt == 0 )
{
printf("No space could be alloc!");
return -1;
}

int iFirNum = 0;
int iSecNum = 0;

printf( "Input first Num:\n");
scanf( "%d", &iFirNum );
printf( "Input second Num:\n");
scanf( " %d", &iSecNum );

printf(" Now Init first link!\n");
int iMove = iSt;
int iIndex = 0;
while( iIndex++ < iFirNum )
{
int iCur = Malloc( link );
ElemType elem = InitElem();
link[iCur].elem = elem;
link[iMove].iCur = iCur;
iMove = iCur;
}

link[iMove].iCur = 0;

printf( "Now Init second link!\n");
iIndex = 0;
while( iIndex++ < iSecNum )
{
ElemType elem = InitElem();

bool bFind = false;
int iPre = iSt;
int iPos = link[iSt].iCur;
while( 1 )
{
if( ComPare( link[iPos].elem, elem ) == 0 )
{
link[iPre].iCur = link[iPos].iCur;
Free( link, iPos );
bFind = true;
break;
}


if( link[iPos].iCur == 0 )
{
break;
}

iPre = iPos;
iPos = link[iPos].iCur;
}

if( !bFind )
{
int iAdd = Malloc( link );
if( iAdd == 0 )
{
printf("Link is full!");
return iSt;
}
link[iAdd].elem = elem;
link[iAdd].iCur = link[iPos].iCur;
link[iPos].iCur = iAdd;
}
}


return iSt;
}


void main()
{
Link link;
InitStaticLink( link );


int iSt = Merge( link );
if( iSt == -1 )
{
return;
}

printf( "Now print link!\n");
Print( link, link[iSt].iCur );

getchar();
int i;
scanf("%d", &i);
}

0 0
原创粉丝点击