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\n",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\n");
95 showElem(L);
96 int a = findElem(L, 10);
97 printf("寻找10返回:%d\n", a);
98 printf("find over\n");
99 showElem(L);
100 insertElem(L, 35);
101 printf("insert 35 over\n");
102 showElem(L);
103 int j;
104 deleteElem(L, 2, j);
105 printf("delete second over\n");
106 showElem(L);
107 }