数据结构上机1顺序表

#include <stdio.h>
#include <malloc.h>

#define OK              1
#define OVERFLOW       -1
#define ERROR           0
#define LIST_INIT_SIZE  100
#define LISTINCREMENT   10

typedef int ElemType;
typedef int Status;
typedef  struct{
    ElemType * elem;
    int        length;
    int        listsize;
}sqlist;

//////////////////////////初始化
Status InitList_sq(sqlist * L){
    L->elem = (ElemType *)malloc(LIST_INIT_SIZE * sizeof(ElemType));
    if(!L->elem)
      return OVERFLOW;
    L->length = 0;
    L->listsize = LIST_INIT_SIZE;
    return OK;
}

//////////////////////////插入
Status ListInsert_Sq(sqlist * L, int i, ElemType e){
    ElemType * newbase, * p, * q;

    if(i < 1 || i > L->length + 1)
      return ERROR;
    if(L->length >= L->listsize){
        newbase = (ElemType *)realloc(L->elem, (L->listsize + LISTINCREMENT) * sizeof(ElemType));
        if(!newbase)
          return OVERFLOW;
        L->elem = newbase;
        L->listsize = L->listsize + LISTINCREMENT;
    }
    q = &(L->elem[i-1]);
    for(p = &(L->elem[L->length-1]); p>=q; --p)
      *(p+1) = *p;
    *q = e;
    ++L->length;
    return OK;
}

//////////////////////////往表中输入数值
void input_data(sqlist * L){
    int i, n=5;
    ElemType e;

    printf("请输入顺序表的数据:\n");
    for(i=1; i<=n; i++){
        printf("请输入第%d个数据 : ", i);
        scanf("%d", &e) ;
        if(!ListInsert_Sq(L,i,e)){
            printf("赋值失败!!");
            break;
        }
    }
    printf("输入完毕!");
    printf("表La的数据为:\n");
    for(i = 1; i <= L->length; i++)
        printf("e[%d]=%d\n", i-1, L->elem[i-1]);
    printf("长度: %d\n\n", L->length);
}

////////////////////////////////合并
Status MergeList(sqlist * La,sqlist * Lb,sqlist * Lc){
        int * pa, * pa_last, * pb, * pb_last, * pc;

        pa = La->elem;
        pb = Lb->elem;
        Lc->listsize = Lc->length = La->length + Lb->length;
        pc = Lc->elem = (ElemType *)malloc(Lc->listsize*sizeof(int));
        if (!Lc->elem)
            return OVERFLOW;
        pa_last = La->elem + La->length - 1;
        pb_last = Lb->elem + Lb->length - 1;
        while(pa <= pa_last)
            *pc++ = *pa++;
        while(pb <= pb_last)
            *pc++ = *pb++;

        return OK;
}

//////////////////////////////////主函数
int main(void){
    sqlist La, Lb, Lc;
    int i;
    ElemType e;

    printf("/*-------------合并操作----------------*\n");
    if(InitList_sq(&La)){
        printf("La初始化成功\n");
        printf("La长度: %d\n", La.length);
        printf("La容量: %d\n\n", La.listsize);
    }
    else
        printf("La初始化错误!");

    printf("请输入La中数据\n");
    input_data(&La);
    printf("输入完毕\n");

    if(InitList_sq(&Lb)){
        printf("Lb初始化成功\n");
        printf("Lb长度: %d\n", La.length);
        printf("Lb容量: %d\n\n", La.listsize);
    }
    else
        printf("Lb初始化错误!");
    printf("请输入Lb中数据\n");
    input_data(&Lb);
    if(MergeList(&La, &Lb, &Lc))
      printf("合并成功\n");
    for(i = 1; i <= Lc.length; i++)
        printf("e[%d]=%d\n", i-1, Lc.elem[i-1]);
    printf("长度: %d\n", Lc.length);

    return 0;
}
时间: 2024-10-23 19:07:53

数据结构上机1顺序表的相关文章

C#(数据结构):1.顺序表结构(2)

人生总有那么多未完的篇章,但是有时候今天你没完成的可能你以后再也不会完成.承诺的一切兴许也变成了过眼云烟.想抓住,握紧的拳头却使他们溜的更快.人生恰如初见,几多的欣喜. ----------------------------------------------------------------------------------------------万恶的分割线------------------------------------------------ 分割线都受不了了.好吧之前我们说

C#(数据结构):1.顺序表结构

我们程序员有三大优点:懒.困.自负.很荣幸我这三点都占了.但是木有关系这丝毫动摇不了我学习的决心.因为技术没有止境. -------------------------------------------------------------------------------------万恶的分割线------------------------------------------------------ 一个人生的分割线. 曾多少次我告诉自己要和昨天的自己说再见.不带走自己的过去,新中幻想着永

C#(数据结构):1.顺序表结构(3)

程序员的道路艰难险阻,如果有新生派的小学生问我他可以做程序员吗?我会毫不犹豫的告诉他放下程序立地成佛,千万不要踏足这一行.虽然这行妹子很多,但是勿来,勿入,勿学.不要问我为什么,说多了全是泪... -----------------------------------------------------------------------------------万恶的分割线------------------------------------------------- 好吧情感戏也就这么多了,

数据结构笔记(二)--顺序表

线性表 线性结构:最常用,最简单的一种数据结构,其中的数据元素是有序且是有限的,其 基本特点: 存在一个唯一的被称为 第一个 的数据元素 存在一个唯一的被称为 最后一个 的数据元素 除第一个元素外,每一个元素均有唯一 一个直接前驱 除最后一个元素外,每一个元素均有唯一 一个直接后继 2.1 线性表的逻辑结构 2.1.1线性表的定义 线性表(Linear List) :是由n个数据类型相同的数据元素(结点)组成的有限序列.其中 n 为不小于0的整数.数据元素的个数 n 称为线性表的长度 相关术语:

【数据结构】之顺序表和链表的比较

1.顺序表 顺序表的优点: (1) 方法简单,各种高级语言中都有数组,容易实现.(2) 不用为表示结点间的逻辑关系而增加额外的存储开销.(3) 顺序表具有按元素序号随机访问的特点. 顺序表的缺点: (1) 在顺序表中做插入删除操作时,平均移动大约表中一半的元素,因此对n较大的顺序表效率低.(2) 需要预先分配足够大的存储空间,估计过大,可能会导致顺序表后部大量闲置:预先分配过小,又会造成溢出. 2.链表 链表的优点: (1) 在链表中做插入删除操作时,不会影响前面和后面的节点,因此对n较大的链表

数据结构实践项目——顺序表

[项目1 - 顺序表的基本运算] 领会"0207将算法变程序"部分建议的方法,将顺序表部分的算法变成程序. 实现顺序表基本运算有算法(对应视频0204创建线性表的实现和0205顺序表基本运算的实现),依据"最小化"的原则进行测试.所谓最小化原则,指的是利用尽可能少的基本运算,组成一个程序,并设计main函数完成测试. 作为第一个这种类型的实践(后续每一部分均有这种实践,这是我们学习的基础,也是实践成果积累的基础),结合相关的算法,给出建议的过程: (1)目的是要测试

【数据结构】之顺序表(Java语言描述)

之前总结过使用C语言描述的顺序表数据结构.在C语言类库中没有为我们提供顺序表的数据结构,因此我们需要自己手写,详细的有关顺序表的数据结构描述和C语言代码请见[我的这篇文章]. 在Java语言的JDK中,为我们提供了专门的顺序表的数据结构API-- ArrayList . Java中的ArrayList的基本存储思路和C语言中的思路相似,即将所有元素存储在一个数组中,当数组中的元素个数达到某种标准时,就要扩容.由于顺序表中的其他操作在Java和C中的实现方式大同小异,因此,本文不再详细介绍这些操作

数据结构实现之顺序表

所谓数据结构,就是定义一组有关系的数据以及在这些数据上的操作,也就是ADT(抽象数据类型). 包括三个方面; ADT List{ 数据对象:  数据关系:基本运算:} 以顺序表为例,它的顺序存储类型: typedef struct { ElemType data[MaxSize]; // <span style="font-family: Arial, Helvetica, sans-serif;">ElemType存放数据类型</span> int lengt

数据结构 --- 02. 内存, 顺序表, 单链表

一.内存 1.基本概念 计算机的作用: 就是用来存储和运算二进制的数据 变量的概念: 就是计算机中的某一块内存空间   衡量计算机内存大小的范围: bit byte kb mb 计算机中内存空间都会有两个基本的属性 大小 地址 不同数据占用内存空间的大小 整数:4byte float:4byte double:8byte 字符:1byte 理解a=10的内存图(引用,指向) 指向:如果一个变量存储了某一块内存空间的地址,则表示该变量指向该块内存 引用:如果一个变量存储了某一块内存空间的地址,则该