数据结构----越往后越发现 大学挂科的科目原来很重要

                                            
                

数据结构体系图





参考《数据结构》刘喜勋编著,已征得作者同意

1.线性表的顺序存储


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

示例——对线性表的操作(增删改查



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

运行结果




2.线性表的链式存储


3.队列的顺序存储


4.循环队列的链式存储


5.栈的顺序存储


6.栈的链式存储


7.树的顺序存储


8.树的链式存储


9.图的邻接矩阵表示


To be continued ,
learning…(Date:2016-2-6)

           


               
                                            
                

数据结构体系图





参考《数据结构》刘喜勋编著,已征得作者同意

1.线性表的顺序存储


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

示例——对线性表的操作(增删改查



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

运行结果




2.线性表的链式存储


3.队列的顺序存储


4.循环队列的链式存储


5.栈的顺序存储


6.栈的链式存储


7.树的顺序存储


8.树的链式存储


9.图的邻接矩阵表示


To be continued ,
learning…(Date:2016-2-6)

           


               

猜你喜欢

转载自blog.csdn.net/u011573697/article/details/81566231