美文网首页数据结构
顺序表的算法实现(C语言)

顺序表的算法实现(C语言)

作者: 爱卖萌的猫公子 | 来源:发表于2019-01-21 12:08 被阅读0次

头文件

//
//  SqList.h
//  数据结构
//
//  Created by 王思源 on 2019/1/21.
//  Copyright © 2019 王思源. All rights reserved.
//

#ifndef SqList_h
#define SqList_h

#include <stdio.h>
#include <stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
//Status是函数的类型,其值是函数结果的状态代码
typedef int Status;
typedef int ElemType;

#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct{
    ElemType *elem;
    int length;
    int listsize;
}SqList;
Status InitList_Sq(SqList *);
Status DestroyList_Sq(SqList *);
Status ClearList_Sq(SqList *);
Status ListEmpty_Sq(SqList);
Status ListLength_Sq(SqList);
Status GetElem_Sq(SqList,int,ElemType *);
Status PriorElem_Sq(SqList,ElemType,ElemType *);
Status NextElem_Sq(SqList,ElemType,ElemType *);
Status ListInsert_Sq(SqList *,int,ElemType);
Status ListDelete_Sq(SqList *,int,ElemType *);
#endif /* SqList_h */

函数.c

//
//  SqList.c
//  数据结构
//
//  Created by 王思源 on 2019/1/21.
//  Copyright © 2019 王思源. All rights reserved.
//

#include "SqList.h"

Status InitList_Sq(SqList *L){
    //构造一个空的线性表
    L->elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
    if (!L->elem) exit(OVERFLOW);
    L->length=0;
    L->listsize=LIST_INIT_SIZE;
    return OK;
}//InitList_Sq

Status DestroyList_Sq(SqList *L){
    //销毁线性表
    if(L->elem==NULL)
        return ERROR;
    free (L->elem);
    L->length=0;
    L->listsize=0;
    return OK;
}
Status ClearList_Sq(SqList *L){
    //清空线性表
    if(L->listsize==0)
        return ERROR;
    int i;
    for(i=0;i<L->length;i++){
        L->elem[i]=0;
    }
    L->length=0;
    return OK;
}
Status ListEmpty_Sq(SqList L){
    // 线性表判空
    if(L.listsize==0)
        return ERROR;
    else if(L.length==0){
        return TRUE;
    }
    else return FALSE;
}
Status ListLength_Sq(SqList L){
    //线性表长度
    if(L.listsize==0)
        return ERROR;
    return L.length;
}
Status GetElem_Sq(SqList L,int i,ElemType* e){
    //线性表查询
    if(L.listsize==0)
        return ERROR;
    if(i<1&&i>L.length)
        return ERROR;
    else {
        *e=L.elem[i-1];
        return OK;
    }
}
Status PriorElem_Sq(SqList L,ElemType cur_e,ElemType * pre_e){
    //查询前驱
    if(L.listsize==0)
        return ERROR;
    int i;
    for(i=0;i<L.length;i++){
        if(L.elem[i]==cur_e){
            if(i!=0) {
                *pre_e=L.elem[i-1];
            }
        }
    }
    return OK;
}
Status NextElem_Sq(SqList L,ElemType cur_e,ElemType *next_e){
    //查询后继
    if(L.listsize==0)
        return ERROR;
    int i;
    for(i=0;i<L.length;i++){
        if(L.elem[i]==cur_e){
            if(i!=L.length-1) {
                *next_e=L.elem[i+1];
            }
        }
    }
    return OK;
}
Status ListInsert_Sq(SqList *L,int i,ElemType e){
    //插入元素
    if(L->listsize==0)
        return ERROR;
    if(i<1&&i>L->length+1)
        return ERROR;
    if(L->listsize==L->length){
        ElemType *newbase;
        newbase=(ElemType *)realloc(L->elem,(L->listsize+LISTINCREMENT)*sizeof(ElemType));
        L->elem=newbase;
        L->listsize=L->listsize+LISTINCREMENT;
    }
    int j;
    for(j=L->length+1;j>i;j--)
        L->elem[j-1]=L->elem[j-2];
    L->elem[i-1]=e;
    L->length+=1;
    return OK;
}
Status ListDelete_Sq(SqList *L,int i,ElemType *e){
    //删除元素
    if(L->listsize==0)
        return ERROR;
    if(i<1&&i>L->length)
        return ERROR;
    *e=L->elem[i-1];
    int j;
    for(j=i;j<L->length;j++)
        L->elem[j-1]=L->elem[j];
    L->elem[L->length-1]=0;
    L->length-=1;
    return OK;
}

main.c

//
//  main.c
//  数据结构
//
//  Created by 王思源 on 2019/1/20.
//  Copyright © 2019 王思源. All rights reserved.
//

#include <stdio.h>
#include "SqList.h"

int main(int argc, const char * argv[]) {
    // insert code here...
    printf("Hello, World!\n");
    SqList L;
    printf("即将构建一个空的线性表...");
    InitList_Sq(&L);
    printf("\n构建成功");
    
    int i;
    printf("请输入要插入的元素数目:");
    scanf("%d",&i);
    int j;
    ElemType e;
    for(j=0;j<i;j++){
        printf("请输入要插入的第%d个值:",j+1);
        scanf("%d",&e);
        ListInsert_Sq(&L, j+1, e);
    }
    
    printf("\n输出线性表中所有元素:");
    for(i=0;i<L.length;i++){
        GetElem_Sq(L, i+1, &e);
        printf("%d ",e);
    }
    
    printf("\n请输入要删除的元素位置:");
    scanf("%d",&i);
    ListDelete_Sq(&L, i, &e);
    printf("\n删除成功,删除了第%d个元素,元素值为%d",i,e);
    
    printf("\n输出线性表中所有元素:");
    for(i=0;i<L.length;i++){
        GetElem_Sq(L, i+1, &e);
        printf("%d ",e);
    }
    
    printf("\n这个线性表是否是空表?");
    i=ListEmpty_Sq(L);
    if(i==TRUE) printf("\n这个线性表是空表");
    else printf("\n这个线性表不是空表");
    
    printf("\n正在清空线性表...");
    ClearList_Sq(&L);
    printf("\n清空线性表");
    
    printf("\n这个线性表是否是空表?");
    i=ListEmpty_Sq(L);
    if(i==TRUE) printf("\n这个线性表是空表");
    else printf("\n这个线性表不是空表");
    
    printf("\n正在销毁线性表...");
    DestroyList_Sq(&L);
    printf("\n销毁成功");
    
    return 0;
}

相关文章

  • 顺序表的算法实现(C语言)

    头文件 函数.c main.c

  • C++语言实现顺序表

    C++语言实现顺序表 顺序表的定义及其特点 顺序表的定义是:把线性表中的所有表项按照其逻辑顺序依次存储到从计算机存...

  • 「数据结构 一」C 语言实现顺序表

    作者原创,转载请注明出处。 个人博客:renzhe.name 用 C 语言实现顺序存储结构的线性表,即顺序表。 下...

  • 顺序表C语言实现

  • 数据结构和算法(二)线性表(顺序存储)

    正文 书接上文,本文实现线性表的顺序存储逻辑。全文实行使用C语言进行。 1.顺序表的定义 2.顺序表初始化 3.顺...

  • 基于C语言的顺序表实现

    一、线性表的主要操作 1)初始化——给线性表相关参数赋初值; 2)求长处——求线性表的元素个数; 3)取元素——取...

  • 2018-10-11

    0.实现顺序索引表的分块查找 实现顺序表的分级查找算法。基本要求包括: (1)设计顺序表和索引表的存储结构。 (2...

  • 顺序存储基本操作1

    顺序存储结构的常见操作,使用c语言实现1、定义 2、初始化 3、判断空表 4、判断是否已经满 5、顺序表长度 6、...

  • 顺序存储基本操作2

    顺序存储结构的常见操作,使用c语言实现 1、定义 2、初始化 3、判断空表 4、判断是否已经满 5、顺序表长度 6...

  • 二分查找

    1.非顺序表查找最大值递归算法 2.顺序表的二分查找算法查找下标最小的特定元素x 递归实现 非递归实现

网友评论

    本文标题:顺序表的算法实现(C语言)

    本文链接:https://www.haomeiwen.com/subject/upfcjqtx.html