您的位置:首页 > 理论基础 > 数据结构算法

数据结构顺序表

2017-11-04 20:25 218 查看
//顺序表存储

//顺序存储就是先申请一块区域,再插入相应数据

//但可能并没有插满,会浪费一定的空间,这就是顺序存储局限性

#include <stdio.h>

#include <stdlib.h>//malloc

#include <strings.h>//bzero

#define MAX 10

typedef int datatype;

typedef struct

{

    datatype buf[MAX];//最多存储数

    int n;//实际存储数

}seqlist;

//1.创建空的顺序表

seqlist* create_empty_seqlist()

{

    seqlist *l = NULL;

    l = (seqlist *)malloc(sizeof(seqlist));

    if(NULL == l)

    {

        printf("malloc fail",__FUNCTION__);

        return NULL;

    }

    bzero(l,sizeof(seqlist));

    return l;

}
//2.判断顺序表是否为满

int is_full_seqlist(seqlist*l)

{

    return l->n == MAX ? 1: 0;

}

//3.判断顺序表是否为空

int is_empty_seqlist(seqlist *l)

{

    return l->n == 0 ? 1 : 0;

}

//4.顺序表插入数据

void insert_data_seqlist(seqlist *l,datatype data)

{

    l->buf[l->n] = data;

    l->n++;

    return ;

}

//5.打印顺序表数据

void printf_data_seqlist(seqlist *l)

{

    int i = 0;

    for(i = 0;i < l->n;i++)

    {

        printf("%d ",l->buf[i]);

    }

    return ;

}

//6.按要求插入数据

void insert_assign_seqlist(seqlist *l,int post,datatype data)

{

    int set = post - 1;

    int last = l->n - 1;

    int i = 0;

    for (i = last;i >= set;i--)

    {

        l->buf[i + 1] = l->buf[i];

    }

        l->buf[set] = data;

        l->n++;

        return ;

}

//7.删除相同数据

void dele_same_deleta_data(seqlist*l,datatype data)

{

    int i = 0, j= 0;

    for(i = 0;i < l->n;i++)

    {

        if(data != l->buf[i])

        {

            l->buf[j] = l->buf[i];

            j++;

        }

    }

        l->n = j;

        return ;

}

//8.数据排序

void sort_data_seqlist(seqlist *l)

{

    int i = 0,j = 0,temp = 0;

    for(i = 0;i < l->n - 1;i++)

    {

      for(j = 0;j < l->n - 1 - i;j++)

      {

        if(l->buf[j] < l->buf[j + 1])

        {

           temp = l->buf[j];

           l->buf[j] = l->buf[j + 1];

           l->buf[j + 1] = temp;

        }

      }

    }

           return ;

}

int main()

{

    seqlist *l = NULL;

    l = create_empty_seqlist();

    datatype buf[] = {10,20,30,40,50};

    int len = sizeof(buf) / sizeof(buf[0]);

    int i = 0;

    int data = 0, post = 0;

    int data1 = 0;

    for(i = 0;i < len;i++)//循环插入数据

    {

      insert_data_seqlist(l,buf[i]);  

    }

    printf_data_seqlist(l);

    putchar('\n');

    printf("please enter insert post and data:");

    scanf("%d%d",&post,&data);

    insert_assign_seqlist(l,post,data);

    printf_data_seqlist(l);

    putchar('\n');

    printf("please input delete data:");

    scanf("%d",&data1);

    dele_same_deleta_data(l,data1);

    printf_data_seqlist(l);

    putchar('\n');

    sort_data_seqlist(l);

    printf_data_seqlist(l);

    putchar('\n');

    free(l);//释放申请内存

    l = NULL;

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  顺序表