数据结构----顺序表

顺序表基础用法

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;
} 

运行结果
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值