Chinaunix首页 | 论坛 | 博客
  • 博客访问: 6320781
  • 博文数量: 2759
  • 博客积分: 1021
  • 博客等级: 中士
  • 技术积分: 4091
  • 用 户 组: 普通用户
  • 注册时间: 2012-03-11 14:14
文章分类

全部博文(2759)

文章存档

2019年(1)

2017年(84)

2016年(196)

2015年(204)

2014年(636)

2013年(1176)

2012年(463)

分类: C/C++

2013-08-01 00:28:56

这几天复习一下数据结构的书,所以写了这个小程序,来巩固自己复习的
主要是线性表的合并,删除,查找,插入等操作

代码如下;

点击(此处)折叠或打开

  1. #include <stdio.h>
  2. #include <stdlib.h>

  3. #define MAXSIZE 100
  4. #define OK 1
  5. #define ERROR 0

  6. typedef struct{
  7.     int elem[MAXSIZE]; //线性表占用的数组空间
  8.     int last; //记录线性表中最后一个元素在数组elem[]中的位置,空表置为1
  9. }SeqList;

  10. void init(SeqList *L); //初始化线性顺序表
  11. int Locate(SeqList L,int find_number); //查找线性顺序表
  12. int InsList(SeqList *L,int insert_number); //对线性顺序表插入数据
  13. int delList(SeqList * L , int delete_number); //删除线性顺序表中的数据
  14. void Merge(SeqList * LA, SeqList *LB ,SeqList *LC); //合并线性顺序表
  15. void create(SeqList * L,int number); //创建线性顺序表
  16. void print_SeqList(SeqList L); //打印表

  17. void main()
  18. {
  19.     printf("######################练习的小程序#########################\n");
  20.     SeqList LA,LB,LC;
  21.     init(&LA);init(&LB);init(&LC);
  22.     printf("构造线性表LA:\n");
  23.     create(&LA,3);    
  24.     printf("构造线性表LB:\n");
  25.     create(&LB,4);
  26.     int select;
  27.     while(1){
  28.         printf("————————————————————————————————————————————————————————————\n");
  29.         printf("其中的查找、插入、删除是针对表LB的操作,合并是针对LA,LB的操作\n");
  30.         printf("\n");
  31.         printf("------------------1.查找-----------------------------------\n");
  32.         printf("------------------2.插入-----------------------------------\n");
  33.         printf("------------------3.删除-----------------------------------\n");
  34.         printf("------------------4.合并-----------------------------------\n");
  35.         printf("------------------5.退出-----------------------------------\n");
  36.         printf("\n");
  37.         printf("————————————————————————————————————————————————————————————\n");
  38.         printf("请输入你要进行的操作: ");
  39.         scanf("%d",&select);
  40.         switch(select){
  41.                 int find_number;
  42.                 int insert_number;
  43.                 int del_number;
  44.             case 1:
  45.                 printf("请输入要查找的数: ");
  46.                 scanf("%d",&find_number);
  47.                 printf("查找数的位置是:%d",Locate(LB,find_number));
  48.                 break;
  49.             case 2:
  50.                 printf("请输入要插入的数:");
  51.                 scanf("%d",&insert_number);
  52.                 InsList(&LB,insert_number);
  53.                 printf("插入后数组的打印:\n");
  54.                 print_SeqList(LB);
  55.                 break;
  56.             case 3:
  57.                 printf("请输入要删除的数:");
  58.                 scanf("%d",&del_number);
  59.                 delList(&LB , del_number);
  60.                 printf("删除后数组的打印:\n");
  61.                 print_SeqList(LB);
  62.                 break;
  63.             case 4:
  64.                 Merge(&LA, &LB ,&LC);
  65.                 printf("合并后的数组打印如下:\n");
  66.                 print_SeqList(LC);
  67.                 break;
  68.             case 5:
  69.                 exit(1);
  70.         }
  71.     }

  72. }

  73. /*初始化操作*/
  74. void init(SeqList * L)
  75. {
  76.     L->last = -1 ;
  77. }

  78. //打印线性表
  79. void print_SeqList(SeqList L)
  80. {
  81.     int i;
  82.     for(i = 0 ; i <= L.last ; i++)
  83.     {
  84.         printf("%d ",L.elem[i]);
  85.     }
  86.     printf("\n");
  87. }

  88. //查找操作
  89. int Locate(SeqList L , int find_number)
  90. {
  91.     int i = 0 ;
  92.     while((i <= L.last)&&(L.elem[i] != find_number))
  93.      i++;
  94.     if(i<=L.last)
  95.      return(i+1);
  96.     else
  97.      return(-1);
  98. }

  99. /*以下是针对顺序表的插入操作*/
  100. int InsList(SeqList * L ,int insert_number)
  101. {
  102.     int k;
  103.     int insert_index = 0 ;
  104.     while((insert_index <= L->last)&& (L->elem[insert_index]<=insert_number))
  105.     {
  106.         insert_index++;
  107.     }
  108.     if(L->last >= MAXSIZE-1)
  109.     {
  110.         printf("表已经满了不能插入数据!\n");
  111.         return ERROR;
  112.     }
  113.     for(k = L->last ; k>=insert_index ; k--)
  114.     {
  115.         L->elem[k+1] = L->elem[k];
  116.     }
  117.     L->elem[insert_index] = insert_number;
  118.     L->last++;
  119.     return OK;
  120. }

  121. /*以下是线性表的删除操作*/
  122. int delList(SeqList * L , int delete_number)
  123. {
  124.     int k;
  125.     int delete_index = 0 ;
  126.     while((delete_index <= L->last) && (L->elem[delete_index] != delete_number))
  127.     {
  128.         delete_index++;
  129.     }
  130.     if(delete_index>L->last){
  131.         printf("你要删除的数据并不存在\n");
  132.         return ERROR;
  133.     }
  134.     for(k = delete_index ; k <L->last ; k++)
  135.     {
  136.         L->elem[k] = L->elem[k+1];
  137.     }
  138.     L->last--;
  139.     return OK;
  140. }

  141. /*线性表的合并运算*/
  142. void Merge(SeqList * LA, SeqList *LB ,SeqList *LC)
  143. {
  144.     int i , j , k;
  145.     i = 0 ; //LA表的下标
  146.     j = 0 ; //LB表的下标
  147.     k = 0 ; //LC表的下标
  148.     while(i <= LA->last && j <= LB->last)
  149.     {
  150.         if(LA->elem[i] <= LB->elem[j])
  151.         {
  152.             LC->elem[k] = LA->elem[i];
  153.             i++;
  154.             k++;
  155.         }
  156.         else
  157.         {
  158.             LC->elem[k] = LB->elem[j];
  159.             j++;
  160.             k++;
  161.         }
  162.     }
  163.     while(i<=LA->last) //当表A还有剩余时,直接加入到C线性表中
  164.     {
  165.         LC->elem[k] = LA->elem[i];
  166.         i++;
  167.         k++;
  168.     }
  169.     while(j <= LB->last) //当表B还有剩余时,直接加入到C线性表中
  170.     {
  171.         LC->elem[k] = LB->elem[j];
  172.         j++;
  173.         k++;
  174.     }
  175.     LC->last = LA->last + LB->last+1;
  176. }

  177. //顺序线性表的构造
  178. void create(SeqList * L,int number)
  179. {
  180.     int i;
  181.     int data;
  182.     printf("输入要存入的数据:");
  183.     for(i = 0 ; i < number ; i++)
  184.     {
  185.         scanf("%d",&L->elem[i]);
  186.     }
  187.     L->last = number-1;
  188. }

阅读(641) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~