1 #include <stdio.h> 2 3 #define maxSize 100 //定义整型常量maxSize值为100 4 /*顺序表的结构体定义*/ 5 typedef struct SqList { 6 int data[maxSize]; //存放顺序表元素的数组 7 int length; //存放顺序表的长度 8 }SqList; //顺序表类型的定义 9 10 /*单链表节点定义*/ 11 typedef struct LNode { 12 int data; //data中存放节点数据域 13 struct LNode *next; //指向后继节点的指针 14 }LNode; //定义单链表节点类型 15 /*双链表节点定义*/ 16 typedef struct DLNode { 17 int data; //data中存放节点的数据域 18 struct DLNode *prior; //指向前驱节点的指针 19 struct DLNode *next; //指向后继节点的指针 20 }DLNode; //定义双链表节点类型 21 22 /*例2.1开始*/ 23 /*顺序表查找 返回的是第一个大于寻找元素的地址*/ 24 int findElem(SqList L,int x) { 25 int i; 26 for (i = 0; i < L.length;++i) { 27 if (x<L.data[i]) {//对顺序表中的元素从小到大逐个进行判断,看x是否小于当前所扫描到的元素 28 return i;//如果小于则返回当前位置 29 } 30 } 31 return i;//如果顺序表中不存在比x大的元素,则应将x插入表尾元素之后,返回i来标记这种情况 32 } 33 /*引用的一个重要作用就是作为函数的参数。以前的C语言中函数参数传递是值传递,如果有大块数据作为参数传递的时候,采用的方案往往是指针,因为这样可以避免将整块数据全部压栈。 34 35 但是现在(C++中)又增加了一种同样有效率的选择(在某些特殊情况下又是必须的选择),就是引用。*/ 36 void insertElem(SqList &L,int x ) {//因为L本身要发生改变,所以要用引用型 37 int p, i; 38 p = findElem(L, x);//调用函数findElem()来找到要插入的位置p 39 for (i = L.length - 1; i >= p;--i) { //从右往左逐个将元素右移一个位置 40 L.data[i + 1] = L.data[i]; 41 } 42 L.data[p] = x; //将x放在插入位置p上 43 ++(L.length); //表内元素多个一个 因此表长自增1 44 } 45 /*例2.1结束*/ 46 47 /*例2.2开始*/ 48 /*删除顺序表L中下标为p的元素,成功返回1,否则返回0*/ 49 int deleteElem(SqList &L,int p,int &e) {//需要改变的变量用引用型 50 int i; 51 if (p<0||p>L.length-1) { 52 return 0;//位置不对返回0 代表删除不成功 53 } 54 e = L.data[p]; //将被删除的元素赋给值e 55 for (i = p; i < L.length - 1;++i) { 56 L.data[i] = L.data[i + 1]; 57 } 58 --(L.length); //表长-1 59 return 1; //删除成功 返回1 60 } 61 62 /*例2.2结束*/ 63 64 /*初始化顺序表*/ 65 66 void initList(SqList &L) {//L本身要发生改变 所以用引用型 67 L.length = 0; 68 } 69 70 /*求指点位置元素的算法*/ 71 int getElem(SqList L,int p,int &e) {//要改变 所以用引用型 72 if (p<0||p>L.length-1) { //p值越界错误 返回0 73 return 0; 74 } 75 e = L.data[p]; 76 return 1; 77 78 } 79 80 81 void showElem(SqList L) { 82 int i; 83 for (i = 0; i < L.length;++i) { 84 printf("%d:%d ",i,L.data[i]); 85 86 } 87 } 88 void main() { 89 SqList L; 90 initList(L); 91 for (int i = 0; i < 5;i++) { 92 insertElem(L, i*10); 93 } 94 printf("insert over "); 95 showElem(L); 96 int a = findElem(L, 10); 97 printf("寻找10返回:%d ", a); 98 printf("find over "); 99 showElem(L); 100 insertElem(L, 35); 101 printf("insert 35 over "); 102 showElem(L); 103 int j; 104 deleteElem(L, 2, j); 105 printf("delete second over "); 106 showElem(L); 107 }