时隔两天的更新,和ddl打的不可开交。
好不容易有点时间了,接着我们的数据结构挑战!
既然要学,就从头开始学。
既然C语言基础不扎实,就从最简单的开始补。
前两期为了当时所需,出现的比较突然,这之后估计会挨着系统化的做出代码总结和学习了!!
于是我们今天来实现最简单的数据结构——线性表的顺序储存结构。
线性表的顺序储存结构图示:
毕竟是最简单的数据结构,就不详述它了,直接贴代码,其中注释很详细。
一共实现了:顺序表的初始化、建立、获取元素、插入元素和删除元素的基本操作。
#include<stdio.h>
#include<stdlib.h>
#define MAXSIZE 20
#define OK 1
#define ERROR 0
typedef int ElemType;
typedef int Status;
//线性表储存结构
typedef struct
{
ElemType data[MAXSIZE];
int length;
}SqList;
//初始化线性表顺序结构
Status InitSqList(SqList *L)
{
int i;
L->length = 0;
for(i=0; i<MAXSIZE; i++)
L->data[i] = 0;
return OK;
}
//创建线性表顺序结构
Status CreateSqList(SqList *L)
{
int i;
if(L->length > MAXSIZE)
return ERROR;
printf("依次输入线性表元素:");
for(i=0; i<L->length; i++)
{
scanf("%d", &L->data[i]);
}
return OK;
}
//获取元素操作:将线性表第i个元素保存在e中
Status GetElem(SqList *L, int i, ElemType *e)
{
if(L->length == 0 || i < 1 || i > L->length)
return ERROR;
*e = L->data[i-1];
return OK;
}
//插入元素操作:在线性表第i个位置插入e
Status ListInsert(SqList *L, int i, ElemType e)
{
int k;
if(L->length == MAXSIZE)//线性表满
return ERROR;
if(i<1 || i>L->length+1)//i范围错误
return ERROR;
if(i <= L->length)
{
for(k=L->length-1; k>=i-1; k--)
L->data[k+1] = L->data[k];
}
L->data[i-1] = e;
L->length++;
return OK;
}
//删除元素操作:在线性表第i个删除元素并保存在e里
Status ListDelete(SqList *L, int i, ElemType *e)
{
int k;
if(L->length == 0)//线性表空
return ERROR;
if(i<1 || i>L->length+1)//i范围错误
return ERROR;
*e = L->data[i-1];
if(i < L->length)
{
for(k=i; k<L->length; k++)
L->data[k-1] = L->data[k];
}
L->length--;
return OK;
}
//打印线性表元素
Status PrintSqList(SqList *L)
{
int i;
for(i=0; i<L->length; i++)
printf("%d ", L->data[i]);
return OK;
}
int main()
{
SqList *L;
L = (SqList *)malloc(sizeof(SqList));
int number = 0;
InitSqList(L);
printf("请输入线性表的元素个数:");
scanf("%d", &L->length);
CreateSqList(L);
int i;
int e;
//使用GetElem函数获取元素
for(i=1; i<=L->length; i++)
{
GetElem(L, i, &e);
printf("第%d个元素为%d\n", i, e);
}
//插入元素验证
ListInsert(L, 3, 6);
printf("插入6在第三个元素位置:");
PrintSqList(L);
printf("\n");
//删除元素验证
ListDelete(L, 3, &e);
printf("删除第三个元素后:");
PrintSqList(L);
}
程序运行结果:
每天提醒自己:数据结构学好的衷旨——多想多写多练!
一定要尝试自己写出C语言代码,每天能写一点都是进步,加油!!