线性表的顺序储存及基本操作

来源:互联网 发布:手机影视剪辑软件 编辑:程序博客网 时间:2024/06/15 18:08
#include<stdio.h>#include<stdlib.h>#define INIT_SIZE 10    // 线性表初始容量#define INCREMENT_SIZE 5 // 当线性表容量不够时,增加元素之前,线性表增长量#define OVERFLOW -5 // 内存分配失败后的退出代号typedef struct {    int *data;  // 线性顺序表的基地址(首地址)ַ    int length; // 当前线性表元素个数    int capacity; //当前线性表的容量} SequenceList;/* * 初始化线性表分配内存空间以及相关参数设定 */void init_list(SequenceList *slist){    slist->data = (int *)malloc(INIT_SIZE*sizeof(int));    if(!slist->data) exit(OVERFLOW); // 如果分配内存失败则退出程序    slist->length = 0;  //初始化当前元素个数为0    slist->capacity = INIT_SIZE; // 初始化当前线性表容量为INIT_SIZE}/* * 插入操作 */void Insert(SequenceList *slist, int element, int index){    // 插入之前判断线性表的容量是否够大,如果不够,按照INCREMENT_SIZE扩充容量    // 重新申请内存空间    if(index >= slist->capacity)    {        slist->data = (int *)realloc(slist->data,                                  (slist->capacity + INCREMENT_SIZE)*sizeof(int));        if(!slist->data) exit(OVERFLOW);        slist->capacity += INCREMENT_SIZE;    }    for(int i=slist->length-1; i > index ; i--)        *(slist->data + i + 1) = *(slist->data + i);    *(slist->data + index) = element;    slist->length++;}/* * 索引操作 */int getElement(SequenceList *slist, int index){    return *(slist->data + index);}/* * 更新操作 */void updateElement(SequenceList *slist, int index, int newValue){    *(slist->data + index) = newValue;}/* * 删除操作 */int deleteElement(SequenceList *slist, int index){    int result = *(slist->data + index);    for(int i=index; i < slist->length; i++)        *(slist->data + i) = *(slist->data + i + 1);    slist->length--;    return result;}/* * 合并操作 */SequenceList mergeList(SequenceList slist1, SequenceList slist2){    SequenceList newList;    init_list(&newList);    int p = 0;    int q = 0;    int r = 0;    while(p<slist1.length && q<slist2.length){        int a = *(slist1.data+p);        int b = *(slist2.data+q);        printf("compare a = %d, b = %d\n", a, b);        if (a <= b){            Insert(&newList, a, r);            p++;        }else {            Insert(&newList, b, r);            q++;        }        r++;    }    while(p < slist1.length) {       Insert(&newList,  *(slist1.data + p), r);       r++;       p++;    }    while(q < slist2.length) {       Insert(&newList, *(slist2.data + q), r);       r++;       q++;    }    return newList;}/* * 打印线性顺序表的所有信息 */void print_slist_info(SequenceList slist){    printf("sequence list\ncapacity is %d\nlength is %d\n", slist.capacity, slist.length);    for(int i=0; i < slist.length; i++)        printf("%d ", *(slist.data + i));}int main(){    SequenceList sequence_list;    init_list(&sequence_list);    return 0;}

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 术后5个月左手张力高怎么办 宝宝4个月体检四肢张力稍高怎么办 上腹绷紧大便酸臭酸臭的怎么办 小学生从双杠上摔下来会怎么办 去健身房碰到教练让你报私教怎么办 提踵把小腿练粗了怎么办 健身后两个小腿不一边粗怎么办 宿舍床上隔段时间有虫子怎么办 b2驾照实习证扣6分怎么办 健身房有个教练想撩我怎么办 学车跟校长投诉了教练怎么办 打架把眼睛打肿怎么办属于什么伤 罗马椅有点高做不了山羊挺身怎么办 节食一周后暴食肚子胀的难受怎么办 健身教练和会员聊天说错肌肉怎么办 两个月宝宝吃奶老是呛到怎么办 怀孕六个月体重一天增加两斤怎么办 备孕同房后一直乳头立起来怎么办 夏天出汉内衣老是湿的怎么办 大腿旁边长了红色的癣怎么办 跑步膝盖疼怎么办能不能再跑了 两周宝宝剧烈运动后咳嗽怎么办 bra的M有点紧L有点宽怎么办 穿吊带总是会露出来左胸罩杯怎么办 生小孩后腰部有一圈黑色勒痕怎么办 新买的饮水机热水口出水小怎么办 新买的饮水机热水口不出水怎么办 平胸没有适合自己的内衣怎么办 售楼小姐穿坏的丝袜都怎么办了 蛋白粉一天喝十克补不起来怎么办 跑步时没有卸妆毛孔堵塞了怎么办 自己做的葡萄酒太甜了怎么办 健身馆碰到一个帅的健身教练怎么办 随着年龄的增长脖子越来越短怎么办 安装软件时解析包出现问题怎么办 鼻子吸进去的气往嘴巴里怎么办 做完瑜伽之后大腿后侧特别紧怎么办 刚下生小狗腿后腿站不起来怎么办 脚被凳子压到了流血了怎么办还很痛 小狗脚被凳子压出血了怎么办 怀孕8个月脐带绕颈一周怎么办