数据结构之线性表----连续存储实现

昨晚听了郝斌老师的数据结构的第一个部分-----连续存储数组的算法演示,郝斌老师很负责任的写了很多代码,今天上午跟中午我来自己去实现下,在实现的同时我参考了@hacke2的这篇博文http://blog.csdn.net/hacke2/article/details/7217003。先分享代码如下:

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

struct Arr

 int *pBase;
 int len;
 int cnt;
};
void init_arr(struct Arr *pArr,int length);
bool append_arr(struct Arr *pArr,int val);//追加
bool insert_arr(struct Arr *pArr,int pos,int val);//插入
bool delete_arr(struct Arr *pArr,int pos,int *pval);//删除
int get(struct Arr *pArr,int pos);
bool is_empty(struct Arr *pArr);
bool  is_full(struct Arr *pArr);
void sort_arr(struct Arr *pArr); //排序
void show_arr(struct Arr *pArr);  //显示
void inversion_arr(struct Arr *pArr); //倒置

int main()
{
 struct Arr arr;
 int pval,val;
 init_arr(&arr,6);
 show_arr(&arr);
 append_arr(&arr,1);
 append_arr(&arr,2);
 show_arr(&arr);
 insert_arr(&arr,2,3);
 show_arr(&arr);
    //delete_arr(&arr,3,&pval);
 inversion_arr(&arr);
 //sort_arr(&arr);
    show_arr(&arr);
 val=get(&arr,3);
 printf("您取的数是:%d\n",val);


 return 0;
}

void init_arr(struct Arr *pArr,int length)
{
    pArr->pBase=(int*)malloc(sizeof(int)*length);
 if(NULL==pArr->pBase)
 {
       printf("malloc fail\n");
    exit(-1);
 }
 else
 {
  pArr->len=length;
  pArr->cnt=0;
 }
 return ;
}
bool is_empty(struct Arr *pArr)
{
   if(0 == pArr->cnt)
    return true;
   else   
    return false;

}

bool is_full(struct Arr *pArr)
{
 if(pArr->cnt==pArr->len)
     return true;
 else
  return false;

}

void show_arr(struct Arr *pArr)
{
   if( is_empty(pArr) )
   {
    printf("is empty\n");
   }
   else
   {
    int i;
    for(i=0;i<pArr->cnt;i++)
    {
     printf("%d  ",pArr->pBase[i]);
   
    }
     printf("\n");
   }

}


bool append_arr(struct Arr *pArr,int val)
{
   if(is_full(pArr))
    return false;
   else
    pArr->pBase[pArr->cnt]=val;
    pArr->cnt++;
    return true;
  
}

bool insert_arr(struct Arr *pArr,int pos,int val)
{
 int i;
 if(pos>pArr->len || pos<1)
  return false;
 else
  for(i=pArr->cnt;i>=pos;--i)
  {
   //printf("%d\n",pArr->cnt);
          pArr->pBase[i]=pArr->pBase[i-1];

  }
  pArr->pBase[pos-1]=val;
  pArr->cnt++;
  return true;
}

bool delete_arr(struct Arr * pArr,int pos,int *pVal) 

    if ( is_empty(pArr) ) 
        return false; 
    if (pos<1|| pos>pArr->cnt) 
        return false; 
    *pVal = pArr->pBase[pos-1]; 
    for(int i=pos; i<pArr->cnt;i++) 
    { 
        pArr->pBase[i-1] = pArr->pBase[i]; 
    } 
    pArr->cnt--; 
    return true; 

void inversion_arr(struct Arr *pArr)
{
 int i=0;
 int j=pArr->cnt-1;
 int t;
//  while(i<j)
//  {
//        t=pArr->pBase[i];
//     pArr->pBase[i]=pArr->pBase[j];
//     pArr->pBase[j]=t;
//     i++;
//     j--;
//  }
 /*下面这段代码与while那段代码功能一样*/
 for(;i<j;i++,j--)
 {
  t=pArr->pBase[i];
  pArr->pBase[i]=pArr->pBase[j];
    pArr->pBase[j]=t;
 }
 return;
}

void sort_arr(struct Arr *pArr)
{
 int i,j,t;
 for(i=0;i<pArr->cnt;++i)
 {
  for(j=i+1;j<pArr->cnt;j++)
  {
            if(pArr->pBase[i]>pArr->pBase[j])
   {
    t=pArr->pBase[i];
    pArr->pBase[i]=pArr->pBase[j];
              pArr->pBase[j]=t;
   }
  }
 }
 return ;
}


int get(struct Arr *pArr,int pos)
{
 if(pos<1 || pos>pArr->cnt)
 printf("您取错数了c\n");
 else
  return pArr->pBase[pos-1];
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值