【数据结构与算法】线性表操作(C++)

  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 }

猜你喜欢

转载自www.cnblogs.com/dream-to-pku/p/11422946.html