顺序表基础用法
SeqList.h 头文件用来存放顺序表的相关函数与结构体
#include <stdio.h>
/*顺序表优点:算法简单,内存单元利用率较高
缺点:需要预先确定数据元素的最大个数
*注意:DataType未指定具体的数据类型,需自己定义一下
MaxSize的大小也没有确定,需要根据自己的情况确定
*/
/*==================顺序表的结构体======================================*/
typedef struct{
DataType list[MaxSize];
int size;
}SeqList;
/*=================初始化顺序表:使其元素个数为0==========================*/
void ListInitiate(SeqList *L){
L->size = 0;
}
/*===============返回当前顺序表的个数======================================*/
int ListLength(SeqList L){
return L.size;
}
/*==============在顺序表第i个位置,插入元素x===============================*/
int ListInsert(SeqList *L, int i, DataType x){
int j=0;
if( L->size >=MaxSize ){
printf("顺序表已满!\n");
return 0;
}else if( i<0 || i>L->size ){
printf("插入i的位置不合法!\n");
return 0;
}else{
for( j=L->size; j>i; j--){
L->list[j] = L->list[j-1]; //从后向前依次移动一个位置
}
L->list[i] = x; //将插入的x元素放在第i位置
L->size++;
return 1; //成功返回 1
}
}
/*====================删除第 i 个元素,并用x接收==============================*/
int ListDelete(SeqList *L, int i, DataType *x){
int j=0;
if( L->size <=0 ){
printf("顺序表为空,无法删除!\n");
return 0;
}else if( i<0 || i > L->size ){
printf("删除位置参数i不合法!\n");
return 0;
}else{
*x = L->list[i]; //将第i个位置的元素存到x中
for( j=i+1; j<=L->size-1; j++ ){
L->list[j-1] = L->list[j];
}
L->size--;
return 1;
}
}
/*==================获取顺序表中第i个元素=====================================*/
int ListGet(SeqList L, int i, DataType *x){
if( i<0 || i>L.size-1 ){
printf("参数i不合法!\n");
return 0;
}else{
*x = L.list[i]; //将顺序表第i个元素给x
return 1;
}
}
/*====================输出顺序表的所有元素===================================*/
int ListPrint(SeqList *L){
int i;
for(i=0; i<L->size; i++){
printf("%d ",L->list[i]);
}
}
Test.c在主函数中测试使用顺序表
#include <stdio.h>
#define MaxSize 100
typedef int DataType; //定义DataType的数据类型为int
#include "SeqList.h" //导入包含顺序表操作的包
void main(void){
SeqList myList;
int i,x;
ListInitiate(&myList);
printf("插入 2---11 之后\n");
for(i=0; i<10; i++){
ListInsert(&myList,i,i+2); //在对应位置插入元素
}
ListPrint(&myList);
printf("\n删除第4个位置的元素之后\n");
ListDelete(&myList, 4, &x); //删除第4个位置的元素
for(i=0; i<ListLength(myList); i++){
ListGet(myList,i,&x); //获取对应位置元素
printf("%d ",x);
}
printf("\n");
system("pause");
}
存放学生信息
#include <stdio.h>
#define MaxSize 100
/*============定义学生的结构体========================*/
typedef struct Student{
long number; //学号
char name[8]; //姓名
char sex[8]; //性别
int age; //年龄
}StuType;
typedef StuType DataType; //定义DataType为StuType类型的
#include "SeqList.h" //导入顺序表需要的包
int main(void){
SeqList myList;
int i;
StuType stu[3] = { //需要添加的具体学生信息
{2021001,"小明","male",18},
{2021002,"小菲","female",20},
{2021001,"大疆","male",26}
};
StuType s;
ListInitiate(&myList); //初始化顺序表
ListInsert(&myList,0,stu[0]); //添加到顺序表中
ListInsert(&myList,1,stu[1]);
ListInsert(&myList,2,stu[2]);
for(i=0; i<ListLength(myList); i++){
ListGet(myList,i,&s);
printf("学号:%d 姓名:%s 性别:%s 年龄:%d \n",s.number, s.name, s.sex, s.age);
}
system("pause");
return 0;
}
运行结果