首页 > 代码库 > 数据结构。顺序表

数据结构。顺序表

#include <stdio.h>
#include <stdlib.h>

#define LIST_INIT_SIZE 100
#define LIST_INCREMENT 10
typedef struct Point   //element type
{
    int x;
    int y;
}Point;
typedef Point ElemType;
typedef struct          //list type
{
    ElemType *elem;     //data
    int length;         //current length
    int listsize;       //maximum size
}Sqlist;
int cpy(ElemType *des,ElemType data)
{
    des->x=data.x;
    des->y=data.y;
    return 0;
}
int elem_cmp(ElemType data1,ElemType data2);
int list_init(Sqlist *mylist);
int list_insert(Sqlist *mylist,ElemType data);
int list_find(Sqlist *mylist,ElemType data);
int list_delete(Sqlist *mylist,ElemType data);
int list_disp(Sqlist mylist);
int main()
{
    Sqlist mylist;
    list_init(&mylist);
    printf("%d,%d\n",mylist.length,mylist.listsize);
    printf("Hello world!\n");

    Point tempt;
    tempt.x=11;
    tempt.y=12;

    list_insert(&mylist,tempt);
    list_disp(mylist);
    printf("%d,%d\n",mylist.length,mylist.listsize);
    getchar();

    tempt.x=21;
    tempt.y=22;
    list_insert(&mylist,tempt);
    list_disp(mylist);
    printf("%d,%d\n",mylist.length,mylist.listsize);
    getchar();

    list_delete(&mylist,tempt);
    list_disp(mylist);
    printf("%d,%d\n",mylist.length,mylist.listsize);
    getchar();

    return 0;
}
int elem_cmp(ElemType data1,ElemType data2)
{
    if( (data1.x==data2.x) &&(data1.y==data2.y) )
    {
        return 1;
    }
    else
    {
        return 0;
    }
}
int list_init(Sqlist *mylist)
{
    mylist->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
    if(mylist->elem!=NULL)
    {
        mylist->length=0;
        mylist->listsize=LIST_INIT_SIZE;

        printf("%d,%d\n",mylist->length,mylist->listsize);
        return 0;
    }
    else
    {
        printf("allocate memory is failed! sorry\n");
        return 1;
    }
}
int list_insert(Sqlist *mylist,ElemType data)
{
    if(mylist->length>=mylist->listsize)
    {
        //if the memo is not enougth to use,realloc
        mylist->elem=(ElemType*)realloc(mylist->elem,LIST_INIT_SIZE+LIST_INCREMENT);
        if(mylist->elem==NULL)
        {
            printf("memo realloc is failed! sorry,friend\n");
            return 1;
        }
        else
        {
            mylist->listsize+=LIST_INCREMENT;
        }
    }
    cpy(&mylist->elem[mylist->length],data);
    mylist->length+=1;
    return 0;
}
int list_find(Sqlist *mylist,ElemType data)
{
    int i=0;
    for(i=0;i<mylist->length;i++)
    {
        if(elem_cmp(mylist->elem[i],data)>0)
        {
            return i+1;
        }
    }
    return 0;
}
int list_delete(Sqlist *mylist,ElemType data)
{
    int i=0,result=list_find(mylist,data);
    if(result==0)
    {
        printf("not found the data \n");
        return 1;
    }
    else
    {
        for(i=result-1;i<mylist->length;i++)
        {
            mylist->elem[i]=mylist->elem[i+1];
        }
        mylist->length--;
        return 0;
    }
}
int list_disp(Sqlist mylist)
{
    system("clear");
    int j=0;
    for(j=0;j<mylist.length;j++)
    {
        printf("{%d,%d}\t",mylist.elem[j].x,mylist.elem[j].y);
    }
    return 0;
}