• 【数据结构与算法】线性表操作(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
    ",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 }
  • 相关阅读:
    ubuntu svn
    node install
    Hello World
    复合过去式
    Fréquence
    HTTP是什么?
    Photon——Requirements 需求
    Ext.Net 实现文件下载
    我的绝世好剑——如何开始创建.NET程序
    Photon——Introduction 介绍
  • 原文地址:https://www.cnblogs.com/dream-to-pku/p/11422946.html
Copyright © 2020-2023  润新知