动态数组的实现之线性表
#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; }}