顺序表的操作
1 //代码来自浙大数据结构的讲义 2 #include <stdio.h> 3 #include <stdlib.h> 4 #define MAXSIZE 10 5 6 typedef struct { 7 ElementType Data[MAXSIZE]; 8 int last; //这里的last代表,顺序表最后一个元素的下标,若有n个元素,其值为n-1. MAXSIZE代表表的最大容量. 9 }List; //定义了一种类型 10 List L, *ptrL; //这种记法省下了struct 11 12 13 //访问下标为i的元素(i从0开始) 14 L.Data[i]; 15 ptrL->Data[i]; 16 17 18 ////////////////////////////////////////////////////////////////////////// 19 //主要操作实现 20 ////////////////////////////////////////////////////////////////////////// 21 22 23 //1.初始化,建立空表 24 List *MakeEmpty() 25 { 26 List *ptrL; 27 ptrL = (List *)malloc(sizeof(List));// 需要带上(List *),类似于 ptrL = new List[sizeof(List)]; malloc需要加stdlib.h 28 ptrL->last = -1; //sizeof判断类型或者变量的长度. 29 return ptrL; //相当于该顺序表的入口 30 } 31 32 //2.查找 33 int Find(ElementType X, List *ptrL) 34 { 35 int i = 0; 36 while (i <= ptrL->last && ptrL->Data[i] != X) //必须在数组里且未找到X时,可以i++ 37 { 38 i++; 39 } 40 if (i > ptrL->last)//说明到最后一位也没有找到x;如果最后一位找到X的话,i不会再增加 41 { 42 return -1; //代表没找到 43 } 44 else 45 return i; 46 } 47 48 //3.插入操作 其后的元素先往后移动,后插入 i<= i <= n+1 最后一个元素位置的后一个是n+1处. 49 void Insert(ElementType X, int i, List *ptrL) 50 { 51 if (ptrL->last == MAXSIZE - 1) 52 { 53 printf("表满"); 54 return; //要有return 55 } 56 if (i < 1 || i > ptrL->last + 2) 57 { 58 printf("位置不合法"); 59 return; 60 } 61 for (int j = ptrL->last; j >= i - 1; j--)//j >= i - 1 第i个位置的下标为i-1 62 { 63 ptrL->Data[j + 1] = ptrL->Data[j]; 64 } 65 ptrL->Data[i - 1] = X; 66 ptrL->last++; //last仍然要指向最后元素 67 return; //这里的return无所谓的. 68 } 69 70 //4.删除操作 i<= i <= n 71 void Delete(int i, List *ptrL) 72 { 73 if (ptrL->last == 0) 74 { 75 printf("表为空,无法删除"); 76 return; 77 } 78 if (i < 1|| i > ptrL->last + 1) 79 { 80 printf("位置不合法"); 81 return; 82 } 83 for (int j = i - 1; j <= ptrL->last; j++) //第i个位置的下标为i-1 84 { 85 ptrL->Data[j] = ptrL->Data[j + 1]; //ptrL是指向List的指针 86 } 87 ptrL->last--; 88 }
新战场:https://blog.csdn.net/Stephen___Qin