之前的blog有发过一篇有关于顺序表的,但是当时觉得自己写的代码可能并不是很好,所以重新学习进行了学习,或许下面这些代码可以记录一下我学习顺序表的过程(代码只有几十行,别嫌弃哈~):
//一、1.线性表(顺序表)-Yufeng Zhang
//头文件部分
#include <stdio.h>
#include <stdlib.h>
//顺序表创建部分
#define MAXSIZE 20 //存储空间的初始分配量
typedef int ElemType; //将int类型定义为ElementType
typedef int Status; //Status是函数基础,其值是函数状态的状态代码
typedef struct
{
ElemType *elem;
int length; //定义顺序表的存储元素大小
} SqList; //顺序表的别名叫做SqList
//1.创建空的线性顺序表
void InitList(SqList* L)
{
L->elem=(ElemType *)malloc(MAXSIZE*sizeof(ElemType));
if(!L->elem)
{
printf("创建顺序表失败");
}
L->length=0;
}
//2.在顺序表中插入元素
void ListInsert(SqList *L,int i,ElemType e)
{
int k;
if(L->length==MAXSIZE) printf("线性表已满"); //线性表已满返回0
if(i<1||i>L->length+1) printf("插入位置错误"); //插入位置不在范围内
if(i<=L->length) //如果插入的元素不是在表尾
{
for (k=L->length-1;k>=i+1;k--)
{
L->elem[k+1]=L->elem[k]; //把元素都往后面挪一个
}
}
L->elem[i-1]=e; //插入元素
L->length++; //长度+1
}
//3.在顺序表中删除元素
void ListDelete(SqList *L,int i)
{
int k;
if(L->length==0) printf("线性表为空"); //线性表为空
if(i>L->length||i<1) printf("删除元素的位置错误");
if(i<L->length)
{
for (k=i;k<L->length;k++)
{
L->elem[k-1]=L->elem[k];
}
}
L->length-=1;
}
//4.在顺序表中获取某个位置的元素
int GetElem(SqList *L,int i)
{
if (i<1||i>L->length) printf("位置提供错误");
return L->elem[i-1];
}
//5.读取顺序表中所有元素
void OutPut(SqList *L)
{
if (L->length==0) printf("顺序表为空");
for (int i=0;i<L->length;i++)
{
printf("%d ",L->elem[i]);
}
}
//主函数部分
int main()
{
SqList L;int num;
InitList(&L);
OutPut(&L);
printf("\n插入元素后:");
ListInsert(&L,1,9);
ListInsert(&L,2,7);
ListInsert(&L,3,2);
OutPut(&L);
printf("\n删除元素后:");
ListDelete(&L,1);
OutPut(&L);
printf("\n取出的第二个元素:");
num=GetElem(&L,2);
printf("%d",num);
return 0;
}