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 }
转载于:https://www.cnblogs.com/dream-to-pku/p/11422946.html
转载请注明原文地址: https://mac.8miu.com/read-66522.html