数据结构(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.完整程序
完整程序包括三个文件:
- main.c(主程序)
用于测试顺序表基本操作 - seqList.h
标准库导入,存放类型定义,符号定义等预定义内容及函数声明。 - 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++;
}
}
本次学习笔记如上所示,不足之处欢迎大家批评指正。