设计算法:将一个素插入到有序的顺序表中,使顺序表仍有序,并编写主函数测试算法。
1. 算法:
①将一个顺序表利用冒泡排序的方法从小到大排序;
②将要插入的数据x与顺序表的素一一进行比较,如果存在相等的话,停止插入;
③如果x位于顺序表某两个相邻的素a、b之间,b素的位置就“让”给x,在插入x之前,先把位于b之后的素向后移动一位,注意,是从顺序表最后一个素开始移动,直到把b也挪到下一个位置,从而空出b的位置,此时,将x插入。
2. 代码:
#include<stdio.h> #include<stdlib.h> #define MAXSIZE 20 #define OK 1 #define OVERFLOW 0 #define ERROR 0 typedef struct{ int *data; int length; }SqList; //初始化 int Init_L(SqList &L){ L.data=(int *)malloc(sizeof(int)*MAXSIZE); //为顺序表分配内存地址 if(!L.data){ exit(OVERFLOW); //内存分配失败,退出 } L.length=0; return OK; } //给顺序表存值 void Filled_L(SqList &L) { int arr[5]={1,10,5,2,25}; int i=0; //将数组里面的值通过循环赋值给顺序表 for(i=0;i<5;i++) { L.data[i]=arr[i]; L.length++; } } //展示顺序表 void Show_L(SqList &L){ for(int i=0;i<L.length;i++){ printf("%d ",L.data[i]); } printf("\n"); } int Len_L(SqList L){ return L.length; } //为顺序表排序 void Order_L(SqList &L){ //利用冒泡排序的方法对顺序表进行排序 int i=0,j=0,temp=0; for(i=0;i<L.length-1;i++){ for(j=0;j<L.length-1-i;j++){ if(L.data[j]>L.data[j+1]){ temp=L.data[j]; L.data[j]=L.data[j+1]; L.data[j+1]=temp; } } } } //插入一个值 int Insert_L(SqList &L,int x){ int i=0,j=0; if(L.length==MAXSIZE-1){ //检查插入位置的合理性,如果表满了,就不能插入素 printf("Postion is full\n"); } for(i=0;i<L.length;i++){ if(x==L.data[i]){ //当插入数据等于顺序表中的任一素时,无法保持顺序性,无法插入 return ERROR; } if(x>L.data[i] && x<L.data[i+1]){ //边遍历边比较,同时顺序表挪位置!!! for(j=L.length-1;j>=i;j--){ //如果插入的素的大小位于顺序表中任一相邻两个素之间,则插入素 L.data[j+1]=L.data[j]; } L.data[i+1]=x; L.length++; } } } int main(){ SqList L; Init_L(L); int x=0; Filled_L(L); printf("SqList is ...\n"); Show_L(L); int len=0; len=Len_L(L); printf("The length of SqList is %d\n",len); printf("SqList after order is ...\n"); Order_L(L); Show_L(L); printf("Please input x to insert\n"); scanf("%d",&x); Insert_L(L,x); printf("SqList after insert is ...\n"); Show_L(L); }
3. 运行结果
2024最新激活全家桶教程,稳定运行到2099年,请移步至置顶文章:https://sigusoft.com/99576.html
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。 文章由激活谷谷主-小谷整理,转载请注明出处:https://sigusoft.com/117532.html