读书人

动态数组的兑现之线性表

发布时间: 2012-09-01 09:33:03 作者: rapoo

动态数组的实现之线性表

#include<stdio.h>#include<malloc.h>typedef struct Node{  int data ;  int cnt ;  int *Pbase;  int length ;  }NODE,*PNODE;PNODE init_list(PNODE list,int len);bool append(PNODE list ,int value);void show_ArrayList(PNODE list);bool is_Empty(PNODE list);bool is_Full(PNODE list);bool insert(PNODE list,int pos , int value);bool delete_element(PNODE list,int pos ,int *value);int  get(PNODE list,int pos);void sort(PNODE list);void clear(PNODE list);void inversion(PNODE list);int main(){  NODE list;  int val ; //被删除元素的值  init_list(&list,5);  append(&list,3);  append(&list,6);    append(&list,2);  append(&list,5);  insert(&list,3,4);  delete_element(&list,1,&val);  show_ArrayList(&list);                 printf("被删除的元素是%d\n",val); int el= get(&list,2); printf("元素是%d\n",el);  sort(&list);  show_ArrayList(&list);  printf("数组倒置\n");   inversion(&list);    show_ArrayList(&list);    return 0;}/* 初始化数组*/PNODE init_list(PNODE list,int len){   list->Pbase =(int *)malloc(sizeof(int)*len);   if(NULL==list->Pbase)   {    exit(-1);   }   list->length =len;   list->cnt=0;   return list;} /*向末尾追加一个元素*/bool append(PNODE list ,int value){   if(is_Full(list))   return false;   list->Pbase[list->cnt]=value;   list->cnt++;   return true;}/* 打印数组*/void show_ArrayList(PNODE list){  if(is_Empty(list))   return;   int i ;   for(i=0;i<list->cnt;i++)   {     printf("%d\n",list->Pbase[i]);   }}/* 判断是否为满*/bool is_Full(PNODE list){  if(list->cnt==list->length)  return true;  return false;} /*  判断是否为空 */bool is_Empty(PNODE list){ if(list->cnt==0)  return true;  return false;}/* 插入元素*/bool insert(PNODE list,int pos , int value){    int i,t ;    if(is_Full(list)||pos>list->cnt+1||pos<1)    return false;      for(i=list->cnt-1;i>=pos-1;i--)      list->Pbase[i+1]=list->Pbase[i];      list->Pbase[pos-1]=value;      list->cnt++;      return true;}/*删除元素*/bool delete_element(PNODE list,int pos ,int *value){   if(is_Empty(list)||pos>list->cnt-1||pos<0)   return false;   int i;   *value = list->Pbase[pos-1];//删除之前把值给value      for(i=pos-1;i<list->cnt;i++)    list->Pbase[i]=list->Pbase[i+1];    list->cnt--;   return true;}/*获取第i个位置的值*/int  get(PNODE list,int pos){  return list->Pbase[pos-1];} /*排序*/void sort(PNODE list){ int i,j; int t ;  for(i=0;i<list->cnt;i++)  {    for(j=i;j<list->cnt;j++)    {      if(list->Pbase[i]>list->Pbase[j])      {         t =list->Pbase[i];         list->Pbase[i]=list->Pbase[j];         list->Pbase[j]=t;      }    }  }}/*清空数组*/void clear(PNODE list){    int i ;    for(i=0;i<list->cnt;i++)    list->Pbase[i]=0;}/*数组倒置*/void inversion(PNODE list){  int t ;  int i,j;  for(i=list->cnt-1,j=0;i>j;i--,j++)    {      t =list->Pbase[i];      list->Pbase[i]=list->Pbase[j];      list->Pbase[j]=t;    }}

读书人网 >编程

热点推荐