数据结构顺序表

来源:互联网 发布:星际战甲软件 编辑:程序博客网 时间:2024/06/03 16:24
//顺序表存储
//顺序存储就是先申请一块区域,再插入相应数据
//但可能并没有插满,会浪费一定的空间,这就是顺序存储局限性

#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;
}
原创粉丝点击