一:头文件定义
1 /*************************************************************************** 2 *项目 数据结构 3 *概要 逻辑结构:线性结构 4 物理结构:顺序结构 5 --------: 顺序表 6 *单位 西安电子科技大学 7 *作者 刘周 8 *日期 2018-3-5 9 ***************************************************************************/ 10 #ifndef _ORDERED_LIST_ 11 #define _ORDERED_LIST_ 12 #include "stdio.h" 13 #include "stdlib.h" 14 15 /*定义顺序表的最大长度*/ 16 #define MAX_SIZE 1000 17 18 typedef struct node { 19 int Element[MAX_SIZE]; 20 int length; 21 }OrderedList; 22 typedef int ElementType; 23 24 /*************************************************** 25 *函数 Init() 26 *功能 初始化顺序表,将它的长度置1 27 *返回 void 28 ***************************************************/ 29 extern void Init(OrderedList * L); 30 31 /*************************************************** 32 *函数 GetLength() 33 *功能 获取顺序表当前元素的个数 34 *返回 int 35 ***************************************************/ 36 extern int GetLength(OrderedList L); 37 38 /*************************************************** 39 *函数 GetElement() 40 *功能 根据索引获取元素 41 *返回 ElementType 42 ***************************************************/ 43 extern ElementType GetElement(OrderedList L,int location); 44 45 /*************************************************** 46 *函数 GetLocation() 47 *功能 根据元素内容获取元素位置 48 *返回 int 49 ***************************************************/ 50 extern int GetLocation(OrderedList L,ElementType e); 51 52 /*************************************************** 53 *函数 GetPrior() 54 *功能 求前驱元素 55 *返回 ElementType 56 ***************************************************/ 57 extern ElementType GetPrior(OrderedList L,ElementType e); 58 59 /*************************************************** 60 *函数 GetNext() 61 *功能 求后继元素 62 *返回 ElementType 63 ***************************************************/ 64 extern ElementType GetNext(OrderedList L,ElementType e); 65 66 /*************************************************** 67 *函数 Insert() 68 *功能 前插操作 69 *返回 void 70 ***************************************************/ 71 extern void Insert(OrderedList *L,int loc,ElementType e); 72 73 /*************************************************** 74 *函数 Delete() 75 *功能 删除操作:根据索引进行删除 76 *返回 void 77 ***************************************************/ 78 extern void Delete(OrderedList* L,int loc); 79 80 /*************************************************** 81 *函数 Traverse() 82 *功能 遍历输出顺序表 83 *返回 void 84 ***************************************************/ 85 extern void Traverse(OrderedList L); 86 #endif // _ORDERED_LIST_
二:具体实现c
1 #include "OrderedList.h" 2 void Init(OrderedList* L) 3 { 4 L->length = 0; 5 } 6 7 int GetLength(OrderedList L) 8 { 9 return L.length; 10 } 11 12 ElementType GetElement(OrderedList L,int location) 13 { 14 if(location>=1 && location < GetLength(L)) 15 { 16 return L.Element[location-1]; 17 } 18 else 19 { 20 printf("位置参数非法!\n"); 21 return 0; 22 } 23 } 24 25 int GetLocation(OrderedList L,ElementType e) 26 { 27 int i=1; 28 while (i <= L.length && e!=L.Element[i-1] ) 29 i++; 30 if(i<=L.length) 31 return i; 32 else 33 { 34 printf("该表无此元素!\n"); 35 return 0; 36 } 37 } 38 39 ElementType GetPrior(OrderedList L,ElementType e) 40 { 41 int loc=GetLocation(L,e); 42 if(loc!=0) 43 { 44 if(loc==1) 45 { 46 printf("第一个元素没有前驱!\n"); 47 exit(0); 48 } 49 else 50 return L.Element[loc-2]; 51 } 52 } 53 54 ElementType GetNext(OrderedList L,ElementType e) 55 { 56 int loc=GetLocation(L,e); 57 if(loc!=0) 58 { 59 if(loc==L.length) 60 { 61 printf("最后一个元素没有后继!\n"); 62 exit(0); 63 } 64 else 65 return L.Element[loc]; 66 } 67 } 68 69 void Insert(OrderedList *L,int loc,ElementType e) 70 { 71 if(L->length == MAX_SIZE) //表满 72 { 73 printf("表已经满了,无法继续插入!\n"); 74 return; 75 } 76 if(loc < 1 || loc > L->length+1)//为什么+1,那个位置表示在最后添加 77 { 78 printf("loc的值:%d不合法!!!\n",loc); 79 return; 80 } 81 for(int i =L->length-1;i>=loc-1;i--) 82 { 83 L->Element[i+1]=L->Element[i]; 84 } 85 L->Element[loc-1] = e; 86 L->length++; 87 } 88 89 void Delete(OrderedList *L,int loc) 90 { 91 if(loc<1 || loc >(*L).length)//注意核实到底有没有+1 92 { 93 printf("\n::::::loc的值不合法!\n"); 94 return; 95 } 96 for(int i =loc;i<(*L).length;i++) 97 { 98 L->Element[i-1]=L->Element[i]; 99 } 100 L->length--; 101 } 102 103 void Traverse(OrderedList L) 104 { 105 if(L.length>0) 106 { 107 printf("\n"); 108 for(int i = 0; i<L.length; i++) 109 { 110 printf("%d\t",L.Element[i]); 111 } 112 } 113 else 114 printf("这是一个空表!\n"); 115 }
1 #include "OrderedList.h" 2 int main(void) 3 { 4 OrderedList L; 5 Init(&L); 6 printf("此时表长:%d\n",GetLength(L)); 7 for(int i =0;i<10;i++) 8 Insert(&L,i+1,i*5); 9 Traverse(L); 10 Insert(&L,7,100); 11 Traverse(L); 12 Delete(&L,8); 13 Traverse(L); 14 printf("\n此时表长:%d\n",GetLength(L)); 15 printf("位置5是元素:%d\n",GetElement(L,5)); 16 printf("元素20在位置%d\n",GetLocation(L,20)); 17 return 0; 18 }