顺序线性表

#include <stdio.h>
int const MAXSIZE = 100;
typedef int element;
typedef struct { element *es; int size; int max; } list;
element list_get_index_value(list * , int );
int main()
{
 //函数声明区
 void list_init( list * , int );
 void list_destory( list * );
 void list_end_insert( list * , element );
 int list_length(list *);
 void list_head_insert( list * , element );
 void list_index_insert( list * , element , int );
 void list_index_update( list * , element , int );
 void list_index_delete( list * , int );
 int list_return_value_index(list * , element );
 void list_print(list *);
 void list_mp_sort(list *);
 void list_combine_sect(list * , list * );
 void list_add_another_l(list * , list * );
 //测试输入
 list ls;
 list_init( &ls , MAXSIZE );
 list_end_insert(&ls , 9 );
 list_end_insert(&ls , 7 );
 list_end_insert(&ls , 4 );
 list_end_insert(&ls , 13 );
 list_end_insert(&ls , 22 );
 list_end_insert(&ls , 4 );
 list_end_insert(&ls , 6 );
 list_head_insert(&ls, 5 );
 list_head_insert(&ls, 14 );
 list_head_insert(&ls, 19 );
 list_head_insert(&ls, 5 );
 list_index_insert(&ls, 7 , 1);
 list_index_update(&ls, 2 , 1);
 list_index_delete(&ls, 4);
 list_mp_sort(&ls);
 
 //显示 
 list_print(&ls);
 printf("7第一次出现的位置为%d\n" , list_return_value_index(&ls , 7) );
 
 //list 求并集 
 list ls_1;
 list_init( &ls_1 , MAXSIZE );
 list_end_insert(&ls_1 , 99 );
 list_end_insert(&ls_1 , 98 );
 list_end_insert(&ls_1 , 97 );
 list_end_insert(&ls_1 , 96 );
 list_end_insert(&ls_1 , 14 );
 list_mp_sort(&ls_1);
 list_print(&ls_1);
 list_combine_sect(&ls , &ls_1 );
 list_print(&ls);
 
 //中断 
 list_destory(&ls);
 getchar();
 return 0;
}

//************************************函数**************************************

//初始化线性表
void list_init( list *ls , int maxsize )
{
 if(maxsize <= 0){printf("初始化出错.....\n");return;}
 ls->es = ( element * )malloc( maxsize * sizeof(element) );
 ls->size = 0;
 ls->max = maxsize;
}

//线性表销毁
void list_destory( list *ls )
{
 free( ls->es );
 ls->size = ls->max = 0;
}

//从表尾插入数据
void list_end_insert( list *ls , element e )
{
 if(ls->size >= ls->max){printf("已到表的最大值,不能再插入新数据了....\n");return;}
 *((ls->es)+(ls->size)) = e ;
 ls->size = ls->size + 1;
}

//从表头插入数据
void list_head_insert( list *ls , element e )
{
 if(ls->size >= ls->max){printf("已到表的最大值,不能再插入新数据了....\n");return;}
 int i = ls->size;
 while( i > 0 )
 {
  *((ls->es)+(i)) = *((ls->es)+i-1);
  --i;
 }
 *(ls->es) = e;
 ls->size = ls->size + 1;
}

//从第index个位置插入数据,index的位置为0到MAXSIZE-1 
void list_index_insert( list *ls , element e , int index )
{
 if(ls->size >= ls->max){printf("已到表的最大值,不能再插入新数据了....\n");return;}
 if( index > (ls->size-1) || index < 0 ){printf("插入的位置不对....\n");return;}
 int i = ls->size;
 while( i > index )
 {
  *((ls->es)+i) = *((ls->es)+i-1);
  --i;
 }
 *(ls->es+index) = e;
 ls->size = ls->size + 1;
}

//修改线性表上的第index个值,index值必须是有意义的数 
void list_index_update( list *ls , element e , int index )
{
 if( index > (ls->size-1) || index < 0 ){ printf("该位置上没有值....\n");return; }
 *((ls->es)+index) = e;
}

//删除线性表上第index个值,其后的元素自动向前一位,size自动减一 ,index值必须是有意义的数 
void list_index_delete( list *ls , int index )
{
 if( index > (ls->size-1) || index < 0 ){ printf("那个位置上不存在元素....\n");return; }
 while( index <= (ls->size - 1))
 {
  *((ls->es)+index) = *((ls->es)+index+1);
  index++;
 }
 ls->size = ls->size - 1;
}

//求得此线性表的长度
int list_length(list *ls)
{
 return ls->size;
}

//获取线性表上第index上的值 
element list_get_index_value(list *ls , int index)
{
 if( index > (ls->size-1) || index < 0 ) { printf("那个位置上不存在元素....\n");return; }
 return *(ls->es + index);
}

//返回与指定值相匹配的第一次出现的元素的位置--顺序查找
int list_return_value_index(list *ls , element e )
{
 int i = 0;
 while( i < ls->size )
 {
  if( *(ls->es + i) == e ) return i;
  i++;
 }
 return -1;
}

//打印所有元素 
void list_print(list *ls)
{
 int i;   
 for( i = 0 ; i < ls->size ; i++ ) printf("[%d]" , *(ls->es + i) );
 printf("\n");
}

//冒泡法排序
void list_mp_sort(list *ls)
{
 int i;
 int j;
 for(i = ls->size-1 ; i >= 0 ; i--)
 {
  for(j = 0 ; j < i ; j++)
  {
   if( list_get_index_value(ls, j) > list_get_index_value(ls, j+1) )
   {
    int tmp;
    tmp = list_get_index_value(ls,j+1);
    list_index_update(ls , list_get_index_value(ls,j) , j+1 );
    list_index_update(ls , tmp , j );
   }
  }
 }
}

//后面的线性表加的前面的线性表的尾部 
void list_add_another_l(list *ls , list *_ls )
{
 int i;
 for(i=0 ; i < _ls->size ; i++)
 {
   list_end_insert(ls , list_get_index_value(_ls , i));
 }
}

//两线性表的并集记过放在一个ls里 
void list_combine_sect(list *ls , list *_ls )
{
 int i;
 for(i=0 ; i < _ls->size ; i++)
 {
  if( list_return_value_index(ls ,list_get_index_value(_ls , i)) == -1 )
  {
   list_end_insert(ls , list_get_index_value(_ls , i));
  }
 }
}

定义顺序线性表,基本函数,和基本操作


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值