将x插入到顺序表中保持顺序表的递增有序

来源:互联网 发布:最新网络歌曲打包下载 编辑:程序博客网 时间:2024/04/30 15:54

例题:设顺序表va中的数据元素递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性。

#include <stdio.h>#include <stdlib.h>#include <assert.h>//不定长顺序表,自动增长#define INITSIZE 10typedef struct DSeqList{int *elem;//指向存放数据的动态数组int length;//有效数据个数int listsize;//总容量,总格子数}DSeqList,*PDSeqList;void InitSeqList(PDSeqList ps)//初始化顺序表 {assert(ps != NULL);if(ps == NULL){return;}ps->elem = (int *)malloc(INITSIZE*sizeof(int));ps->length = 0;ps->listsize = INITSIZE;}static bool IsFull(PDSeqList ps)//判满 {return ps->length == ps->listsize;}//将总容量扩大到原来的2倍static void Inc(PDSeqList ps){ps->elem = (int *)realloc(ps->elem,ps->listsize*2*sizeof(int));ps->listsize *= 2;}bool Insert(PDSeqList ps,int pos,int val)//插入数据 {if(pos<0 || pos>ps->length){return false;}if(IsFull(ps)){ Inc(ps);}for(int i=ps->length-1;i>=pos;i--)//移动后面的数据{ps->elem[i+1] = ps->elem[i];}ps->elem[pos] = val;ps->length++;return true;}/*顺序表中的数据元素递增有序。试写一算法,将x插入到顺序表的适当位置上,以保持该表的有序性*/bool Insert_x(PDSeqList ps,int x){if(IsFull(ps)){Inc(ps);}int i;for(i = 0;i < ps->length;i++){if(ps->elem[i] > x){break;}}for(int j = ps->length-1;j >= i;j--){ps->elem[j+1] = ps->elem[j];}ps->elem[i] = x;ps->length++;return true;}int main(){DSeqList ds1;DSeqList ds2;InitSeqList(&ds1);InitSeqList(&ds2);for(int i = 0;i < 10;i++){Insert(&ds1,i,i);Insert(&ds2,i,i);}Show(&ds1);Show(&ds2);//测试用例Insert_x(&ds1,5);Insert_x(&ds1,-1);Insert_x(&ds1,23);Show(&ds);return 0;} 

阅读全文
0 0
原创粉丝点击