数据结构顺序表
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;
}
//顺序存储就是先申请一块区域,再插入相应数据
//但可能并没有插满,会浪费一定的空间,这就是顺序存储局限性
#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;
}
相关文章推荐
- 数据结构 顺序表
- 数据结构之 将顺序表所有元素逆置,要求空间复杂度为O(1)
- 数据结构顺序表实现学习
- 【数据结构】顺序表
- 【数据结构】顺序表
- 【数据结构】顺序表和单链表所有知识点(附带面试题)
- 数据结构——顺序表
- 温故知新之数据结构顺序表
- 数据结构-顺序表
- 【数据结构_顺序表_List_1102】顺序表上数据划分
- 数据结构——顺序表最大子段和动态规划法
- 数据结构顺序表及链表实验
- 数据结构顺序表基本流程
- 数据结构——Josephus问题顺序表实现
- 数据结构顺序表操作示例
- Java数据结构与算法—及实现 线性表 顺序表、链表、栈、队列详解
- 数据结构—顺序表
- 数据结构1.1-顺序表
- 数据结构——顺序表
- pta-数据结构与算法题目集(中文)-4-2 顺序表操作集