数据结构。顺序表

#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;
}

转载于:https://www.cnblogs.com/L-Arikes/p/3898364.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值