zoukankan      html  css  js  c++  java
  • 数据结构(线性表,队列,栈,树,图)

    1.线性链表的顺序存储构建(SeqList.h)

    顺序表构建

     1 //顺序表构建
     2 #include <stdio.h>
     3 #define MaxSize 100
     4 typedef int DataType;
     5 
     6 typedef struct
     7 {
     8     DataType list[MaxSize];
     9     int size;
    10 } SeqList;
    11 
    12 //初始化顺序表L
    13 void ListInitiate(SeqList *L)
    14 {    
    15     L->size = 0;      //定义初始数据元素个数
    16 }
    17 
    18 //返回顺序表L的当前数据元素个数
    19 int ListLength(SeqList L)    
    20 {
    21     return L.size;
    22 }
    23 
    24 //在顺序表L的位置i(0≤i≤L.size)前插入数据元素值x,插入成功返回1,插入失败返回0
    25 int ListInsert(SeqList *L, int i, DataType x)
    26 {
    27     int j;
    28     if(L->size >= MaxSize)
    29     {
    30         printf("顺序表已满无法插入! 
    ");    
    31         return 0; 
    32     }
    33     else if(i < 0 || i > L->size )
    34     {
    35         printf("参数i不合法! 
    ");
    36         return 0;
    37     }
    38     else
    39     {
    40         for(j = L->size+1; j > i; j--) 
    41         L->list[j] = L->list[j-1];               //为插入做准备
    42 
    43         L->list[i] = x;                          //插入
    44         L->size ++;                          //元素个数加1
    45                           
    46         return 1;
    47     }
    48 }
    49 
    50 //删除顺序表L中位置i(0≤i≤L->size-1)的数据元素值并存放到参数x中,删除成功返回1,删除失败返回0
    51 int ListDelete(SeqList *L, int i, DataType *x)    
    52 { 
    53     int j;
    54     if(L->size == 0)
    55     {
    56         printf("顺序表已空无数据元素可删! 
    ");
    57 
    58         return 0;
    59     }
    60     else if(i <0 || i > L->size-1)
    61     {
    62         printf("参数i不合法");
    63         return 0;
    64     }
    65     else
    66     {
    67         *x = L->list[i];                  //保存删除的元素到参数x中
    68 
    69         for(j = i +1; j <= L->size; j++) 
    70         L->list[j-1] = L->list[j];        //依次前移
    71 
    72         L->size--;                       //数据元素个数减1
    73 
    74         return 1;
    75     }
    76 }
    77 
    78 //取顺序表L中第i个数据元素的值存于x中,成功则返回1,失败返回0
    79 int ListGet(SeqList L, int i, DataType *x)
    80 {
    81     if(i < 0 || i > L.size-1)
    82     {
    83         printf("参数i不合法! 
    ");
    84         return 0;
    85     }
    86     else
    87     {
    88         *x = L.list[i];
    89         return 1;
    90     }
    91 }

    示例——对顺序表的操作(增删改查)

      1 #include <stdio.h>
      2 #include <stdlib.h>
      3 #define MaxSize 100
      4 #define ListLenth 50
      5 typedef int DataType;
      6 
      7 //定义顺序表的类型SeqList
      8 typedef struct
      9 {
     10     DataType list[MaxSize];
     11     int size;
     12 } SeqList;
     13 
     14 //初始化数据
     15 void CreList(SeqList *L)
     16 {
     17     int i;
     18 
     19     L->size=50;
     20     //顺序表加入数据,依次为0-49
     21     for(i=0;i<50;i++)
     22     {
     23         L->list[i]=i;
     24     }
     25 }
     26 
     27 //初始化顺序表*L
     28 void ListInitiate(SeqList *L)
     29 {
     30     L->size=0;
     31 }
     32 
     33 //返回顺序表L的当前数据元素个数 
     34 int ListLength(SeqList *L)
     35 {
     36     return L->size;
     37 }
     38 
     39 //查找功能,传参——线性表L和查找元素DataType x,成功返回x在L中的序号否则返回-1
     40 int ListLocate(SeqList L,DataType x)
     41 {
     42     int i=0;
     43     while(i<L.size&&L.list[i]!=x)
     44     {
     45         i++;
     46     }
     47     if(i<L.size) 
     48         return (i);
     49     else
     50         return (-1);
     51 }
     52 
     53 //插入功能,传参——线性表L、插入位置i和所插入元素x,成功返回1否则返回0
     54 int ListInsert(SeqList *L,int i,DataType x)
     55 {
     56     int j;
     57     if(L->size>=MaxSize-1)
     58     {
     59         printf("顺序表已满无法插入!
    ");
     60         return 0;
     61     }
     62     else if(i<0||i>L->size+1)
     63     {
     64         printf("参数i不合法!
    ");
     65         return 0;
     66     }
     67     else
     68     {
     69         for(j=L->size;j>i;j--)
     70         {
     71             L->list[j]=L->list[j-1];        //为插入做准备
     72         }
     73         L->list[i]=x;                    //插入
     74         L->size++;                        //元素个数加1
     75         return 1;
     76     }
     77 }
     78 
     79 //删除功能,传参——顺序表L、删除元素的序号i和要返回所删除的元素
     80 int ListDelete(SeqList *L,int i,DataType *x)
     81 {
     82     int j;
     83     if(L->size==0)
     84     {
     85         printf("顺序表已空无数据元素可删!
    ");
     86         return 0;
     87     }
     88     else if(i<0||i>L->size-1)
     89     {
     90         printf("参数i不合法!
    ");
     91         return 0;
     92     }
     93     else
     94     {
     95         *x=L->list[i];
     96         for(j=i+1;j<L->size;j++)
     97         {
     98             L->list[j-1]=L->list[j];
     99         }
    100         L->size--;
    101 
    102         return 1;
    103     }
    104 }
    105 
    106 void ListShow(SeqList L)
    107 {
    108     int i;
    109     
    110     printf("当前List表为
    ");
    111     for(i=0;i<L.size;i++)
    112     {
    113         printf("%d ",L.list[i]);
    114     }
    115     printf("
    共%d个元素
    
    ",L.size);
    116     
    117     return ;
    118 }
    119 
    120 main()
    121 {
    122 
    123     int i;
    124     SeqList L;
    125     DataType x;
    126     
    127     //初始化顺序表L 
    128     ListInitiate(&L);
    129     //初始化顺序表数据为0-49 
    130     CreList(&L);
    131 
    132     //显示链表 
    133     ListShow(L);
    134     
    135     //删除操作 
    136     printf("1.删除20位置元素
    ");
    137     ListDelete(&L,20,&x);
    138     printf("所删除元素为:%d
    ",x);
    139     ListShow(L);
    140     
    141     //增加操作 
    142     printf("2.在1位置插入元素10
    ");
    143     ListInsert(&L,1,10);
    144     ListShow(L);
    145     
    146     //查询操作 
    147     printf("3.查询30在链表中的位置:%d
    ",ListLocate(L,30));
    148     printf("
    ");
    149     printf("4.查询20(已删除)在链表中的位置:%d
    ",ListLocate(L,20));
    150      
    151     return 0;    
    152 }

    运行结果

    To be continued ,

    learning...(Date:2016-01-10)

  • 相关阅读:
    常用正则表达式大全摘录
    非常好用的CSS样式重置表
    Vue2.0 Props双向绑定报错简易处理办法
    kuangbin带我飞QAQ DLX之一脸懵逼
    乘法逆元+快速幂
    kuangbin带我飞QAQ 线段树
    kuangbin带我飞QAQ 最短路
    uva11401:Triangle Counting 递推 数学
    分块
    今日头条”杯2018年湖北省赛(网络赛)
  • 原文地址:https://www.cnblogs.com/Ambrose/p/5118826.html
Copyright © 2011-2022 走看看