线性表的基本操作

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>

#define ERROR 0
#define OK    1
#define init_size  5
#define increment 1

typedef  int elemType;

typedef struct
{
    elemType *elem;
 int length;
 int list_size;
}sqlist;


int init_list(sqlist &L)                                        //初始化线性表
{
 L.elem = (elemType*)malloc(init_size*sizeof(elemType));
 if(L.elem == 0)
  return ERROR;
 else
  return  OK;
}

int insert_list(sqlist &L,int j,elemType e)                          //线性表的插入
{
    elemType *newbase,*p,*q;
// p = L.elem;

 newbase = (elemType*)realloc(L.elem, (L.list_size + increment)*sizeof(elemType));
 L.list_size += increment;
 if(newbase == NULL)
  exit(ERROR);
 else
 L.elem = newbase;

    q = &(L.elem[j-1]);
 for( p = &(L.elem[L.length-1]);p >= q;p--)
 {
  *(p+1) = *(p);
 }
 *q = e;
    ++L.length;
    return OK;
   


}

int delete_list(sqlist  &L,int i,elemType &e)                                        //删除线性表的第i个元素
{                                                                                    //并把所删除的元素赋给参数e
 elemType *p;
 if((i < 1)||(i > L.length))
  return ERROR;
    for(p = &(L.elem[i-1]);p < &(L.elem[L.length]);p++)
 {
  *p = *(p+1);
 }
 e = L.elem[i-1];
 --L.length;
 return OK;
 

}
int loc_list(sqlist L,elemType e)                    //从线性表中查找元素e,如果不存在返回0
{
 int i;
 elemType *p_temp;
 p_temp = L.elem;
 for(i = 0;i< L.length;i++)
 {
   if(*L.elem == e)
   {
  L.elem = p_temp;
  //printf("%d",i);
  return i;
   }
   else
  L.elem++;
 }

 return 0;
}
int  next_elem(sqlist L,elemType e,elemType &next_e )                               //求元素e的后继,如不存在返回0。
{
 elemType i,j;
 elemType *p_temp;
 p_temp = L.elem;
 i = loc_list(L,e);
 if(i<1||i>L.length)
  return ERROR;
 for(j = 0;j < L.length-1;j++)
 {
  if(j == i+1)
  {
  
   next_e = *L.elem;
   L.elem = p_temp;
   return next_e;
  }
  else
   L.elem++;
 }
 return ERROR;
}

void main()
{
 sqlist L;
 init_list(L);                        
 L.length = init_size;
 int e;
 L.list_size = init_size;         
           
 for(int i = 0;i < L.list_size;i++ )                       //初始化
 {
  L.elem[i] = 8-i;
  
  
 }                                   
 for(int m = 0;m < L.list_size;m++)
 {
  printf("%d/n",L.elem[m]);
 }
 printf("/n");
 
 insert_list(L,2,9);                                      //插入运算

 
 for(int j = 0;j < L.list_size;j++)
 {
  printf("%d/n",L.elem[j]);
 }
 printf("/n");
 delete_list(L,2,e);                                     //删除运算
 for(int t = 0;t < L.length;t++)
 {
  printf("%d/n",L.elem[t]);
 }
// printf("%d/n",e);
 int next_e,next;
    next = next_elem(L,7,next_e);                            //求所给元素的后继,如果是最后一个元素则返回0    
    printf("%d",next);
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值