数据结构——使用C语言 线性表之顺序表的实现

1.定义结构体变量

//定义顺序表结构
typedef struct 
{
	elementtype data[max_size];
	int length;
}seqlist;

2.初始化顺序表

//1.初始化顺序表

void InitList(seqlist* L)
{
	L->length = 0;
}

2.插入算法实现

//2.插入数据元素
//1)先判断位置
//2)插入

void Insert(seqlist* L, int index, elementtype element)
{
	if (L->length + 1 > max_size)
	{
		printf("数组已满,插入失败\n");
		return;
	}
	if (index<0 || index>max_size - 1)
	{
		printf("只能在允许的范围[0,%d]内插入\n", max_size - 1);
		return;
	}
	if (index > L->length)
	{
		printf("插入下标超出数组有效值,插入失败\n");
		return;
	}
	for (int i = L->length-1; i >= index; i--)
	{
		L->data[i + 1] = L->data[i];
	}
	L->data[index] = element;
	L->length++;
}


3.删除算法的实现

//顺序表删除数据元素  pos位置
void DeleteList(SeqList* seqlist, int pos, elementType* deleteElement) 
{
	if (seqlist->length <= 0)
	{
		printf("顺序表已空无数据可删");
		return;
	}
	if (pos<0 || pos>seqlist->length-1)
	{
		printf("参数pos不合法");
		return;
	}
	else
	{
		*deleteElement = seqlist->data[pos];
		for (int i = pos; i <= seqlist->length-1; i++)
		{
			seqlist->data[i-1] = seqlist->data[i];
		}
		seqlist->length--;
		return;
	}
}

5.取数据元素

int GetList(SeqList* seqlist, int pos, elementType* x)
{
	if (pos<0 || pos>seqlist->length)
	{
		printf("参数不存在");
		return ;
	}
	*x = seqlist->data[pos - 1];
	
}

例一:

编程实现如下任务:建立一个如表2-1所示的学生情况表,要求先依次输入数据元素,然后依次显示当前表中的数据元素。假设该表数据元素个数在最坏情况下不会明过100个。要求使用顺序表.

学生情况表
学号姓名性别年龄
2000001张三20
2000002李四21
2000003王五22

程序设计如下

#include<stdio.h>
#include"seqlist.h"  //包含顺序表文件(初始化、插入以及顺序表结构体定义)
#define max_size 100
//定义顺序表元素
typedef struct 
{
	int number;
	char* name;
	char* gender;
	int age;
}elementtype;
int main()
{
	seqlist list;
	elementtype x[3] =
	{
		{2000001,"张三","男",20},
		{2000002,"李四","男",21},
		{2000003,"王五","女",22}
	};
	InitList(&list);
	
	for (int i = 0; i < 3; i++)
	{
		Insert(&list, i, x[i]);
	}
	
	for (int i = 0; i < list.length; i++)
	{
		printf("%d\t%s\t%s\t%d\n", x[i].number, x[i].name, x[i].gender, x[i].age);
	}
	

}

程序运行结果如图

例二:

建立一个线性表,首先依次输入数据元素1,2,3....10,然后删除数据元素4,最后一次显示当前线性表的数据元素。假设当前线性表的数据元素个数在最坏情况下不超过100个,要求使用线性表

#include<stdio.h>
#include<stdlib.h>
#include"seqlist.h"  //包含顺序表头文件(初始化、删除、取数据元素、结构体定义)
#define max_size 100
//定义顺序表数据元素
typedef struct {
	int number;
}elementType;


int main()
{
	SeqList mylist;
	elementType number[10] = { 1,2,3,4,5,6,7,8,9,10 };
	int x;
	
	InitList(&mylist);
	for (int i = 0; i < 10; i++)
	{
		InsertList(&mylist, i, number[i]);//此处i是下标
	}
	printf("删除前");

	for (int i = 0; i < mylist.length; i++)
		printf("%3d", mylist.data[i]);
	printf("\n");

	DeleteList(&mylist, 4, &x);
	printf("删除后");
	for (int i = 1; i <= mylist.length; i++)//此处i是位置
	{
		GetList(&mylist, i, &x);
		printf("%3d", x);
	}
	printf("\n");
}

代码运行结果如下

 

  • 1
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值