数据结构(C语言版)学习笔记1-顺序表

数据结构(C语言版)学习笔记1-顺序表

1.顺序表定义

typedef int ElemType;   //定义ElemType为int类型
#define INITSIZE 10     //顺序表存储空间初始分配值
//顺序表结构体定义
typedef struct 
{
    ElemType *data;     //存储空间基地址
    int length;         //顺序表长度(即已存入的元素个数)
    int listsize;       //当前存储空间容量(即能存入的元素个数)

}sqList;

2.顺序表基本操作

//1.初始化操作
void Initlist(sqList *L);
//2.求表长操作
int Getlen(sqList *L);
//3.取元素操作
int Getelem(sqList *L,int i,ElemType *e);
//4.元素定位操作
int Locate(sqList *L,ElemType x);
//5.插入操作
int Insert(sqList*L,int i,ElemType x);
//6.删除操作
int Delete(sqList*L,int i,ElemType *e);
//7.输出操作
void List(sqList*L);
//8.输入操作
void Input(sqList*L,int num);

3.完整程序

完整程序包括三个文件:

  1. main.c(主程序)
    用于测试顺序表基本操作
  2. seqList.h
    标准库导入,存放类型定义,符号定义等预定义内容及函数声明。
  3. seqList.c
    存放顺序表基本操作函数主体内容。

1.main.c主程序

//main.c
#include"seqList.h"

int main()
{
    int i;
    int j;
    sqList L;
    Initlist(&L);                               //顺序表初始化
    printf("顺序表长:%d \n",Getlen(&L));        //获取顺序表长
    Input(&L,10);                               //顺序表赋初值
    List(&L);                                   //输出顺序表
    printf("插入操作:%d\n",Insert(&L,4,25));     //顺序表插值
    printf("顺序表长:%d \n",Getlen(&L));        //获取顺序表长
    List(&L);
    Getelem(&L,3,&j);
    printf("顺序表第3个元素为:%d\n",j);
    printf("98是顺序表内第%d号元素\n",Locate(&L,98));
    List(&L);
    Delete(&L,3,&j);
    printf("顺序表长:%d \n",Getlen(&L));       //获取顺序表长
    List(&L);

    printf("程序执行完成!");

}

2.seqList.h头文件

//seqList.h
#ifndef _SEQLIST_H
#define _SEQLIST_H

#include<stdio.h>
#include<stdlib.h>

typedef int ElemType;   //定义ElemType为int类型
#define INITSIZE 10     //顺序表存储空间初始分配值
//顺序表结构体定义
typedef struct 
{
    ElemType *data;     //存储空间基地址
    int length;         //顺序表长度(即已存入的元素个数)
    int listsize;       //当前存储空间容量(即能存入的元素个数)

}sqList;

//操作
//1.初始化操作
void Initlist(sqList *L);
//2.求表长操作
int Getlen(sqList *L);
//3.取元素操作
int Getelem(sqList *L,int i,ElemType *e);
//4.元素定位操作
int Locate(sqList *L,ElemType x);
//5.插入操作
int Insert(sqList*L,int i,ElemType x);
//6.删除操作
int Delete(sqList*L,int i,ElemType *e);
//7.输出操作
void List(sqList*L);
//8.输入操作
void Input(sqList*L,int num);

#endif

2.seqList.h头文件

//seqList.c
#include"seqList.h"

//1.初始化操作
void Initlist(sqList*L)
{//创建一个空的顺序表
    L->data=(ElemType*)malloc(sizeof(ElemType)*INITSIZE);   //为顺序表分配初始空间,将空间基地址赋值给data
    L->length=0;                                            //初始长度为0(元素个数)
    L->listsize=INITSIZE;                                   //初始空间大小(能存入元素的数量)
    printf("顺序表创建成功!基地址:%o,表长:%d,表大小:%d\n",L->data,L->length,L->listsize);

}

//2.求表长操作
int Getlen(sqList*L)
{
    return (L->length);
}

//3.取元素操作
int Getelem(sqList*L,int i,ElemType*e)
{//取顺序表第i号元素,通过e返回
    if(i<1 || i>L->length)  return 0;   //超出范围参数返回0
    else
    {
        *e=L->data[i-1];
        return 1;
    }
}

//4.元素定位操作
int Locate(sqList *L,ElemType x)
{
    int i;
    for(i=0;i<L->length;i++)    //历遍寻找目标元素值
    {
        if(L->data[i] == x)
        {
            return i+1;         //找到目标返回位置
        }
    }
    return 0;                   //没找到,返回0
}
//5.插入操作
int Insert(sqList*L,int i,ElemType e)
{
    int j;
    if(i<1 || i>L->length)  return 0;   //插入位置错误
    if(L->length == L->listsize)        //当顺序表已满时,重新分配空间
    {
        L->data=(ElemType*)realloc(L->data,sizeof(ElemType)*((L->length)+1));
        L->listsize++;                  //顺序表大小+1
    }
    for(j=L->length;j>i-1;j--)          //将第i位及其之后的元素后移一个位
        L->data[j]=L->data[j-1];
    
    L->data[i-1]=e;
    L->length++;

    return 1;                           //插入成功,返回1
}

//6.删除操作
int Delete(sqList*L,int i,ElemType *e)
{
    int j;
    if(i<1 || i>L->length)  return 0;   //超出范围,参数不合理
    *e=L->data[i-1];
    for(j=i-1;j<L->length-1;j++)        //将目标值之后所有值前移一个位置。
        L->data[j]=L->data[j+1];    
    L->length--;                        //顺序表长度-1;
    return 1;                           //删除操作成功,返回1
}


//7.输出操作
void List(sqList*L)
{
    int i;
    for(i=0;i<L->length;i++)
        printf("-%d",L->data[i]);
    printf("\n");
}

//8.输入操作
void Input(sqList*L,int num)
{
    int i;
    for(i=0;i<num;i++)
    {
        L->data[i]=99-i;
        L->length++;
    }
        
}

本次学习笔记如上所示,不足之处欢迎大家批评指正。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值