当前位置:   article > 正文

数据结构-顺序表基本操作的实现_数据结构随机产生n个整数并存于数组中

数据结构随机产生n个整数并存于数组中

今天是线性表中的顺序表的实现,主要实现函数如下,读者有需要可以评论,我可以适当加几个。

//实现数组的以下操作,并编写程序验证你的操作。
int InputList(SeqList *L,int n); //输入n个整数存放到数组中
int PrintList(SeqList *L); //输出数组中的所有元素
int Locate(SeqList *L,ElemType e); //在数组L中查找e,返回找到的下标,否则返回-1
int InsList(SeqList *L,int i,ElemType e); //在数组L中下标为i的位置上插入元素e
int *DelList(SeqList *L,int i); //在数组L中删除下标为i的位置上的元素,用e返回删除元素的值
void merge(SeqList *LA, SeqList *LB, SeqList *LC); //将两个有序数组LA,LB 合并成一个数组LC。
代码如下:

#include<stdio.h>
#include<stdlib.h> 
#define  maxsize   20                      //数组的最大长度;
typedef int ElemType;
typedef  struct
{   ElemType  elem[maxsize];                    /*数组占用的空间*/ 
    int  last;                                  /*最后一个元素在数组elem[ ] 中的位置(下标值),空表置为-1*/
}SeqList;
SeqList list;
SeqList LA,LB,LC;                               //定义线性表数组 
//实现数组的以下操作,并编写程序验证你的操作。
int  InputList(SeqList *L,int n);               //输入n个整数存放到数组中
int  PrintList(SeqList *L);                     //输出数组中的所有元素
int  Locate(SeqList  *L,ElemType  e);           //在数组L中查找e,返回找到的下标,否则返回-1
int  InsList(SeqList *L,int i,ElemType  e);      //在数组L中下标为i的位置上插入元素e
int  *DelList(SeqList *L,int *i);               //在数组L中删除下标为i的位置上的元素,用*e返回删除元素的值
void merge(SeqList *LA,  SeqList *LB,  SeqList *LC); //将两个有序数组LA,LB 合并成一个数组LC。
int InputList(SeqList *L,int n)                  //函数作用为输入n个整数存放到数组中         
{
 L->last=n-1;                                  //将最后一个数组元素下标赋值给L->last 
 printf("请输入信息入数组\n");
 int i;
 for(i=0;i<n;i++)
 {
  scanf("%d",&L->elem[i]);                   //输入信息入每个数组 
  } 
}
int  PrintList(SeqList *L)                        //函数作用为打印每个数组的全部元素 
{
    printf("执行打印操作:\n"); 
    printf("打印输出数组信息如下:\n"); 
    int i,j=0;                                    //定义j的作用为换行所用 
 for(i=0;i<=L->last;i++)
 {
  printf("%4d",L->elem[i]);
  j++;         
  if(j%4==0)                               //每输出4个元素换行一次                         
  printf("\n");
  }
  printf("\n"); 
}
int  Locate(SeqList  *L,ElemType  e)             //函数作用为查找值e所在数组的下标位置 
{
 int i;
 for(i=0;i<=L->last;i++)
 {
  if(L->elem[i]==e)                       //查找到就跳出 
  break;
 }
 if(i>L->last)                               //遍历数组后未发现值等于e返回-1 
 return -1;
 else
 return i;                                   //找到就返回所在数组下标 
}
int  InsList(SeqList *L,int i,ElemType  e)       //函数作用为插入一个数进位置i 
{
 while(i<0||i>L->last+1)                      //判断插入位置是否合法 
 {
  printf("插入位置不合法请从新输入插入位置:  ");
  scanf("%d",&i);
  }
 if(i>L->last)                                //如果插入位置为最后一个就插到最后一个 
 {
  L->last++;                              //插入元素数组的最后L->last更换 
  L->elem[i]=e; 
 }
 else                                        //插入位置不为最后一个 
 {
  int j;
     for(j=L->last;j>=i;j--)                //从最后一个元素开始往后移开一位 
     {
     L->elem[j+1]=L->elem[j];
     }
     L->elem[i]=e;
     L->last++;                              //插入元素数组的最后L->last更换 
 }
}
int  *DelList(SeqList *L,int *i)               //函数作用删除位置为i的元素,i用指针原因将i传出函数 
{
 int k=*i;                                  //保存第一次输入的i值 
    ElemType *e;                               //作用为传出删除元素e的地址 
 while(k<0||k>L->last)                      //判断是否插入元素合法,不合法继续输入插入位置i 
 {
  printf("删除位置不合法请从新输入删除位置: ");
  scanf("%d",&k);
    }
    *i=k;                                      //将最后一次输入的合法的i赋值给*i,便于主函数的输出i 
 int j;
 *e=L->elem[k];                              //保存删除元素,最后返回用e返回 
 for(j=k+1;j<=L->last;j++)
 {
  L->elem[j-1]=L->elem[j];                //将所有的从i+1的元素向后移动一位 
 }
 L->last--;                                   //改变L->last的值 
 return e;                                   //返回删除元素 
}
void merge(SeqList *LA,  SeqList *LB,  SeqList *LC)  //函数作用为合并俩数组 
{
 int i=0,j=0,k=0; 
 while((i<=LA->last)&&(j<=LB->last))         //比较数组LA,LB的值,非递减的顺序合并 
 {
  if(LA->elem[i]<=LB->elem[j])           //比较L->A,L->B的值,将较小的插入L->C中 
  {                                    
   LC->elem[k]=LA->elem[i];          //将较小的插入L->C中
   i++,k++;                          //插入后下标都+1 
  }
  else
  {
   LC->elem[k]=LB->elem[j];         //同理插入较小的元素进L->C 
   j++,k++;                          //插入后下标往后移动一位 
  }
 }
 if(i>LA->last)                           //如果数组L->A比L->B长度短就将L->B剩下的元素插入L->C中 
 {
  for(j;j<=LB->last;j++)
  {
   LC->elem[k]=LB->elem[j];
   k++; 
  }
 }
 else                                     //如果数组L->A比L->B长度长就将L->A剩下的元素插入L->C中
 {
  for(i;i<=LB->last;i++)
  {
   LC->elem[k]=LA->elem[i];
   k++; 
  }
 }
 LC->last=k-1;                          //更新LC->last的值
}
int main()
{   printf("创建数组:\n");
 printf("请输入数组元素的个数  ");
 int n;                                
 scanf("%d",&n);                      //输入创建的数组的长度
 InputList(&list,n);                  //调用创建函数 
 PrintList(&list);                    //调用打印输出函数 
 int search_subscript,e1;            //定义需要查找的e1,和即将返回的元素下标search_subscript 
 printf("执行查找操作:\n");
 printf("请输入需要查找的元素值  ");
 scanf("%d",&e1);                    //输入查找的元素的值e1 
 search_subscript=Locate(&list,e1);  //将查找的元素的下标返回给 search_subscript
 if(search_subscript==-1)             //查找的元素不存在 
 printf("查找的元素不存在于此数组");
 else
 printf("经过查找的元素的下标为  %d\n",search_subscript); //输出查找的元素下标 
 int i,e2;                             //定义插入位置i和插入元素e2 
 printf("执行插入操作:");
 printf("请输入需要插入的元素下标和元素值  ");
 scanf("%d%d",&i,&e2);                 //输入位置i和插入元素e2
 InsList(&list,i,e2);                  //调用插入函数 
 printf("插入后元素后的新数组信息如下\n");
 PrintList(&list);                     //打印输出插入后的新数组 
 int *e3;                              //定义要删除的元素的值 
 printf("执行删除操作:\n");
 printf("请输入要删除的数组的下标  ");
 scanf("%d",&i);                       //输入要删除的位置i 
 e3=DelList(&list,&i);                 //将删除的元素的值返回赋值给e3 
 printf("删除元素后的数组信息如下\n");
 PrintList(&list);                      //打印输出删除后的数组 
 printf("删除的下标%d的元素的值为%d\n",i,*e3);
 printf("执行合并数组操作:即将创建两个数组LA,和LB\n"); 
 int n1,n2,count=1;                    //定义需要创建的两数组的长度,cuont为下面计算输出的第几个数组 
 printf("请输入创建的俩数组的元素的个数n1和n2分别是: ");
 scanf("%d%d",&n1,&n2);                //输入俩数组长度 
 printf("创建的第%d个数组如下:\n",count++);
 InputList(&LA,n1);                   //调用创建函数数组LA 
 printf("创建的第%d个数组如下:\n",count++);
 InputList(&LB,n2);                  //调用创建函数数组LB 
 merge(&LA,&LB,&LC);                //调用合并函数 
 PrintList(&LC);                     //打印输出的合并后的函数LC 
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43
  • 44
  • 45
  • 46
  • 47
  • 48
  • 49
  • 50
  • 51
  • 52
  • 53
  • 54
  • 55
  • 56
  • 57
  • 58
  • 59
  • 60
  • 61
  • 62
  • 63
  • 64
  • 65
  • 66
  • 67
  • 68
  • 69
  • 70
  • 71
  • 72
  • 73
  • 74
  • 75
  • 76
  • 77
  • 78
  • 79
  • 80
  • 81
  • 82
  • 83
  • 84
  • 85
  • 86
  • 87
  • 88
  • 89
  • 90
  • 91
  • 92
  • 93
  • 94
  • 95
  • 96
  • 97
  • 98
  • 99
  • 100
  • 101
  • 102
  • 103
  • 104
  • 105
  • 106
  • 107
  • 108
  • 109
  • 110
  • 111
  • 112
  • 113
  • 114
  • 115
  • 116
  • 117
  • 118
  • 119
  • 120
  • 121
  • 122
  • 123
  • 124
  • 125
  • 126
  • 127
  • 128
  • 129
  • 130
  • 131
  • 132
  • 133
  • 134
  • 135
  • 136
  • 137
  • 138
  • 139
  • 140
  • 141
  • 142
  • 143
  • 144
  • 145
  • 146
  • 147
  • 148
  • 149
  • 150
  • 151
  • 152
  • 153
  • 154
  • 155
  • 156
  • 157
  • 158
  • 159
  • 160
  • 161
  • 162
  • 163
  • 164
  • 165
  • 166
  • 167
  • 168
  • 169
  • 170
  • 171

代码为本人学习数据结构时曾经写的作为参考,欢迎读者提出错误纠正

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/293074
推荐阅读
相关标签
  

闽ICP备14008679号