数据结构 C语言 线性表 顺序表 实现

本文档展示了如何使用C语言实现线性顺序表的数据结构,包括初始化、清除、销毁、判断是否为空、获取长度、插入、删除、查找、遍历等操作。此外,还提供了比较和合并线性表的函数,以及测试这些操作的主函数示例。
摘要由CSDN通过智能技术生成
#include<stdio.h>
#include<stdlib.h >

/*
C提供三种预处理。宏定义、文件包含、条件编译 。
宏 定 义:又称为宏代换、宏替换,简称“宏”。宏定义格式:#define 标识符 字符串
文件包含:#include<***.h>或者 #include“***.h(.c)”
条件编译:(#ifndef 和  #endif 成对出现)作用:避免两个字段中间的预处理重复处理。
*/

#ifndef STATUS_H
#define STATUS_H

#define    TRUE        1            //真
#define    FALSE        0            //假
#define YES            1            //是
#define NO          0            //否
#define    OK            1            //通过
#define    ERROR        0            //错误
#define SUCCESS        1            //成功
#define UNSUCCESS    0            //失败
#define    INFEASIBLE    -1            //不可行

#ifndef _MATH_H_                 //系统中已有此状态码定义,要避免冲突
#define    OVERFLOW    -2            //堆栈上溢
#define UNDERFLOW    -3            //堆栈下溢
#endif

/* 状态码识别类型 */
typedef int Status;

/* 宏函数(使用define进行多行定义时要加\)*/
//函数暂停一段时间
#define Wait(x)\
 {\
    double _Loop_Num_;\
    for(_Loop_Num_=0.01; _Loop_Num_<=100000.0*x; _Loop_Num_+=0.01);\
 }//设立一个空循环

//摁Enter键继续
#define PressEnter\
 {\
    fflush(stdin);\
    printf("Press Enter...");\
    getchar();\
    fflush(stdin);\
 }//fflush清空标准输入流stdin

/*
getchar()函数等待输入,直到按回车才结束。回车前的所有输入字符都会逐个显示在屏幕
但只有第一个字符作为函数的返回值。利用getchar函数让程序调试运行结束后
等待编程者按下键盘才返回编辑界面。
*/

#endif

#define LIST_INIT_SIZE 100     //定义线性顺序表的容量置为100
#define LISTINCREMENT  10      //定义线性顺序表的递增量置为10
typedef int LElemType_Sq;      //定义线性顺序表类型的别名
typedef struct SqList          //定义线性顺序表的结构体并起名为SqList
{
    LElemType_Sq *elem;        //表的首地址
    int length;                //表的当前长度
    int listsize;              //表的容量
} SqList;

//顺序表相关操作列表------------------------------------------------------------
Status InitList_Sq(SqList *L)
{
    //创建一个线性顺序表-------------------------------------------------------1
    (*L).elem = (LElemType_Sq*)malloc(LIST_INIT_SIZE*sizeof(LElemType_Sq));
    if(!(*L).elem)    exit(OVERFLOW);
    (*L).length = 0;
    (*L).listsize = LIST_INIT_SIZE;
    return OK;
}

void ClearList_Sq(SqList *L)
{
    //清除线性顺序表内容-------------------------------------------------------2
    (*L).length = 0;
}

void DestroyList_Sq(SqList *L)
{
    //销毁线性顺序表-----------------------------------------------------------3
    free((*L).elem);
    (*L).elem = NULL;
    (*L).length = 0;
    (*L).listsize = 0;
}

Status ListEmpty_Sq(SqList L)
{
    //判断线性顺序表是否为空---------------------------------------------------4
    return     L.length==0 ? TRUE : FALSE;
}

int ListLength_Sq(SqList L)
{
    //返回该线性顺序表的长度---------------------------------------------------5
    return L.length;
}

Status GetElem_Sq(SqList L, int i, LElemType_Sq *e)
{
    //取得该线性顺序表确定位置的内容并赋予e------------------------------------6
    if(i<1 || i>L.length)
        return ERROR;
    else
        *e = L.elem[i-1];
    re
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值