[데이터 구조] 정적 링크StaticLinkList

3528 단어
#include "string.h"
#include "ctype.h"      

#include "stdio.h"    
#include "stdlib.h"   
#include "io.h"  
#include "math.h"  
#include "time.h"

#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0

#define MAXSIZE 1000 /*           */

typedef int Status;           /* Status      ,           , OK  */
typedef char ElemType;        /* ElemType          ,     char */


Status visit(ElemType c)
{
    printf("%c ",c);
    return OK;
}

/*              */
typedef struct 
{
    ElemType data;
    int cur;  /*   (Cursor) , 0       */
} Component,StaticLinkList[MAXSIZE];


/*      space            ,space[0].cur    ,"0"      */
Status InitList(StaticLinkList space) 
{
	int i;
	for (i=0; i<MAXSIZE-1; i++)  
		space[i].cur = i+1;
	space[MAXSIZE-1].cur = 0; /*         ,       cur 0 */
	return OK;
}


/*          ,          ,    0 */
int Malloc_SSL(StaticLinkList space) 
{ 
	int i = space[0].cur;           		/*           cur    */
	                                		/*                  */
	if (space[0]. cur)         
	    space[0]. cur = space[i].cur;       /*              , */
	                                        /*              */
	                                        /*         */
	return i;
}


/*      k             */
void Free_SSL(StaticLinkList space, int k) 
{  
    space[k].cur = space[0].cur;    /*        cur         cur */
    space[0].cur = k;               /*                   cur */
}

/*     :    L   。    :  L        */
int ListLength(StaticLinkList L)
{
    int j=0;
    int i=L[MAXSIZE-1].cur;
    while(i)
    {
        i=L[i].cur;
        j++;
    }
    return j;
}

/*   L  i             e   */
Status ListInsert(StaticLinkList L, int i, ElemType e)   
{  
    int j, k, l;   
    k = MAXSIZE - 1;   /*   k             */
    if (i < 1 || i > ListLength(L) + 1)   
        return ERROR;   
    j = Malloc_SSL(L);   /*           */
    if (j)   
    {   
		L[j].data = e;   /*           data */
		for(l = 1; l <= i - 1; l++)   /*    i         */
		   k = L[k].cur;           
		L[j].cur = L[k].cur;    /*   i      cur       cur */
		L[k].cur = j;           /*            i        ur */
		return OK;   
    }   
    return ERROR;   
}

/*     L  i        */
Status ListDelete(StaticLinkList L, int i)   
{ 
    int j, k;   
    if (i < 1 || i > ListLength(L))   
        return ERROR;   
    k = MAXSIZE - 1;   
    for (j = 1; j <= i - 1; j++)   
        k = L[k].cur;   
    j = L[k].cur;   
    L[k].cur = L[j].cur;   
    Free_SSL(L, j);   
    return OK;   
} 

Status ListTraverse(StaticLinkList L)
{
    int j=0;
    int i=L[MAXSIZE-1].cur;
    while(i)
    {
            visit(L[i].data);
            i=L[i].cur;
            j++;
    }
    return j;
    printf("
"); return OK; } int main() { StaticLinkList L; Status i; i=InitList(L); printf(" L :L.length=%d
",ListLength(L)); i=ListInsert(L,1,'F'); i=ListInsert(L,1,'E'); i=ListInsert(L,1,'D'); i=ListInsert(L,1,'B'); i=ListInsert(L,1,'A'); printf("
L FEDBA :
L.data="); ListTraverse(L); i=ListInsert(L,3,'C'); printf("
L “B” “D” “C” :
L.data="); ListTraverse(L); i=ListDelete(L,1); printf("
L “A” :
L.data="); ListTraverse(L); printf("
"); return 0; }

좋은 웹페이지 즐겨찾기