List-C

//file name:list.h
//compiled ok with vc++6.0
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef int Type;
typedef struct seqlist{
    Type *data;
    int listsize;
    int listlength;
}seqlist;

//ADT LIST
void    Initlist(seqlist *L,int n);
void    Freelist(seqlist *L);
void    Clearlist(seqlist *L);
int        IsEmpty(seqlist *L);
int        IsFull(seqlist *L);
int        Length(seqlist *L);
int        Locate(seqlist *L,Type item);
Type    GetData(seqlist *L,int pos);
void    InsertData(seqlist *L,int pos,Type item);
void    InsertRear(seqlist *L,Type item);
void    UpdateData(seqlist *L,int pos,Type item);
void    Printlist(seqlist *L);
//ADT code
void Initlist(seqlist *L,int n){
    L->data = (Type *)malloc(n*sizeof(Type));
    if(L->data==NULL )exit(1);
    L->listsize =n; //表大小为n
    L->listlength =0; //空表长度为0,(元素个数)
}

void    Freelist(seqlist *L){
    free(L->data);
}

void    Clearlist(seqlist *L){
    L->listlength=0;
}

int        IsEmpty(seqlist *L){
    return (L->listlength==0)?1:0;
}

int        IsFull(seqlist *L){
    return (L->listlength==L->listsize)?1:0;
}

int        Length(seqlist *L){
    return L->listlength;
}

int        Locate(seqlist *L,Type item){
    int i=0;
    while(i<=L->listlength-1 && item!=L->data[i])
    i++;
    return (i<=L->listlength-1)?i:-1;
}

Type    GetData(seqlist *L,int pos){
    if (0>pos || pos>L->listlength+1){
        printf("pos out rang...");
        exit(1);
    }
    return (L->data[pos]);
}

void    InsertData(seqlist *L,int pos,Type item){
    int i;
    if(IsEmpty(L)){
        printf("list is full");
        exit(1);
    }
    if (0>pos || pos>L->listlength+1){
        printf("pos out rang...");
        exit(1);
    }
    //从表最后到pos位置的所有元素,全部移动1位

    for (i=L->listlength - 1;i>pos;--i){
        L->data[i+1]=L->data[i];
    }
    L->data[pos]=item;
    L->listlength++;
}
//在尾部插入数据
void    InsertRear(seqlist *L,Type item){
    if(IsFull(L)){
        printf("list is full");
        exit(1);
    }
    L->data[L->listlength]=item;
    L->listlength++;
}

void    UpdateData(seqlist *L,int pos,Type item){
    if (0>pos || pos>L->listlength+1){
        printf("pos out rang...");
        exit(1);
    }
    L->data[pos]=item;
}

void    Printlist(seqlist *L){
    int i;
    for (i=0;i<L->listlength;++i){
        printf("%3d",GetData(L,i));
        if((i+1)%10==0)    printf("/n");
    }
    printf("/n");
}

//file name: listtest.c
#include "stdio.h"
#include "list.h"
void main(void){
    int i;
    seqlist L;
    Initlist(&L,50);
    srand((unsigned int)time(0));
    for(i=0;i<50;++i)
        InsertRear(&L,rand()%51);

    Printlist(&L);
    printf("********************************/n");
    printf("Locate(&L,22)=%d/n",Locate(&L,22));
    printf("%d/n",GetData(&L,10));
    Freelist(&L);
    system("pause");
}

你可能感兴趣的:(struct,list,null,System)