1 /* 2 * 一、数据结构基础之顺序表 3 * 顺序表数据结构(结构的定义+在此结构上的操作) 4 * --- 2012年4月21日 ---by lee 5 */ 6 7 #ifndef _SEQUENTIAL_LIST_H 8 #define _SEQUENTIAL_LIST_H 9 10 #include "Utility.h" 11 12 //宏定义顺序表的空间大小 13 #define LISTSIZE 20 14 15 //类型定义 16 typedef int DataType; 17 18 //声明顺序表类型结构体 19 typedef struct _SqList 20 { 21 DataType data[LISTSIZE];//存放数据元素的数组 22 int length;//记录顺序表的实际长度 23 } SqList; 24 25 //对顺序表的基本操作 26 void InitList(SqList* list);//初始化顺序表 27 int GetLength(SqList* list);//获得当前顺序表的长度 28 DataType GetElement(SqList* list, int index);//返回表中位于位置index处的元素值(index从0到Length-1) 29 void InsertElement(SqList* list, int index, DataType e);//在表中位置index处插入值为e的元素 30 void DeleteElement(SqList* list, int index);//删除表中位置index处的元素 31 void PrintList(SqList* list);//打印顺序表中的元素 32 33 34 //初始化顺序表 35 void InitList(SqList* list) 36 { 37 list->length=0; 38 } 39 40 //获得当前顺序表的长度 41 int GetLength(SqList* list) 42 { 43 return list->length; 44 } 45 46 //返回表中位于位置index处的元素值(index从0到Length-1) 47 DataType GetElement(SqList* list, int index) 48 { 49 if((index < 0) || (index > list->length-1)) 50 Error("Array Index Out Of Bounds"); 51 return list->data[index]; 52 } 53 54 //在表中位置index处插入值为e的元素(index从0到Length为合法位置) 55 void InsertElement(SqList* list, int index, DataType e) 56 { 57 //检查插入位置是否合法 58 if((index < 0) || (index > list->length)) 59 Error("Illegal Inserted Position"); 60 //检查表空间是否已满 61 if(list->length >= LISTSIZE) 62 Error("Array Space Is Full"); 63 64 //当在位置length处插入e时(即数组末尾下一位),无需移动任何元素 65 //当在位置index处插入时(index<length),从index~length-1的元素全部后移一位 66 for(int i=list->length-1; i>=index; i--) 67 { 68 list->data[i+1]=list->data[i]; 69 } 70 //在位置index处插入元素e 71 list->data[index]=e; 72 //更新顺序表长度 73 list->length++; 74 } 75 76 //删除表中位置index处的元素(index从0到Length-1) 77 void DeleteElement(SqList* list, int index) 78 { 79 //检查删除位置是否合法 80 if((index < 0) || (index > list->length-1)) 81 Error("Illegal deleted Position"); 82 83 //当在位置length-1处删除e时(即数组末尾),无需移动任何元素 84 //当在位置index处删除时(index<length-1),从index+1~length-1的元素全部前移一位 85 for(int i=index; i<list->length-1; i++) 86 { 87 list->data[i]=list->data[i+1]; 88 } 89 //更新表长度 90 list->length--; 91 } 92 93 //打印顺序表中的元素 94 void PrintList(SqList* list) 95 { 96 for(int i=0; i<list->length; i++) 97 { 98 printf("%d\t",list->data[i]); 99 } 100 printf("\n"); 101 } 102 103 #endif 104 105 //测试代码 106 /* 107 SqList* list=(SqList*)malloc(sizeof(SqList)); 108 InitList(list); 109 InsertElement(list,0,1); 110 InsertElement(list,1,2); 111 InsertElement(list,2,3); 112 InsertElement(list,3,4); 113 InsertElement(list,4,5); 114 InsertElement(list,5,6); 115 PrintList(list); 116 DeleteElement(list,3); 117 PrintList(list); 118 printf("%d\n",GetElement(list,1)); 119 DeleteElement(list,6); 120 */
转载于:https://www.cnblogs.com/programlee/archive/2012/05/05/2485089.html