数据结构-线性表

1、线性表

线性结构: 一对一

假设有n个数据元素,满足线性结构;
特点:	1. n=0, 该表为空
			2. a0为表头, 没有直接前驱, a(n-1)为表尾, 没有直接后继
			3. 其他有且仅有一个直接前驱和一个直接后继

顺序存储结构存放线性表:顺序表
链式存储结构存放线性表:链表

顺序表的实现:{
				一维数组   !=  顺序表
				数组任意位置任意使用,顺序表必须从头使用,不能有空
}

示例代码

  • seqlist2.c
/*********************************************************
*	> File Name: seqlist2.c
*	> Author: YQQ
*	> Mail: 
*	> Created Time: 2021年04月27日 星期二 15时07分43秒
*
*	> Program:
**************************************************************/

#include"seqlist.h"

/*
*功能:创建一个空的顺序表
*返回值:创建成功返回堆区地址, 失败返回NULL
* */

seqlist * createSeqList()
{
	seqlist * L = (seqlist *)malloc(sizeof(seqlist));
	if(NULL == L)
	{
		printf("malloc fail\n");
		return NULL;
	}

	L->last = -1;

	return L;
}

int isFullSeqList(seqlist *L)
{
	return ((L->last == MAXSIZE-1)?1:0);
}
int isemptySeqList(seqlist *L)
{
	return ((L->last == -1)?1:0);
}

int insertSeqList(seqlist *L, int pos, data_t x)
{
	//1.为满或位置不合法都不进行插入操作
	if(isFullSeqList(L) || (pos < 0) || (pos > L->last+1))
	{
		printf("插入失败:表为满或位置不合法\n");	
		return -1;
	}
	//2.插入数据
	//2.1 腾位置
	int i=0;
	for(i = L->last; i >= pos; i--)
	{
		L->data[i+1] = L->data[i];
	}
	//2.2 放数据
	L->data[pos] = x;
	//2.3 last+1
	L->last++;

	return 0;
}

int deleteSeqList(seqlist *L, int pos, data_t *x)
{
	//1.表为空或位置不合法 都不进行删除操作
	if(isemptySeqList(L) || (pos < 0) || (pos > L->last))
	{
		printf("删除失败:表为空或位置不合法\n");
		return -1;
	}

	//保存删除数据
	*x = L->data[pos];

	//2.删除操作
	int i = 0;
	for(i = pos; i < L->last; i++)
	{
		L->data[i] = L->data[i+1];
	}

	//3.last-1
	L->last--;

	return 0;
}

void showSeqlist(seqlist *L)
{
	int i=0;
	for(i = 0; i <= L->last; i++)
	{
		printf("%d ", L->data[i]);
	}
	puts("");
}
  • main.c
/*********************************************************
*	> File Name: main.c
*	> Author: YQQ
*	> Mail: 
*	> Created Time: 2021年04月27日 星期二 16时08分39秒
*
*	> Program:
**************************************************************/

#include"seqlist.h"

int main(void)
{
	seqlist * L = createSeqList();

	if(NULL == L)
	{
		printf("创建顺序表失败\n");
	}
	
	insertSeqList(L, 0, 4);
	insertSeqList(L, 0, 3);
	insertSeqList(L, 0, 2);
	insertSeqList(L, 0, 1);

	showSeqlist(L);

	data_t x;
	deleteSeqList(L, 0, &x);

	showSeqlist(L);

	return 0;
}
  • seqlist.h
#ifndef __SEQLIST_H
#define __SEQLIST_H

#include<stdio.h>
#include<stdlib.h>
#include<string.h>

#define MAXSIZE 10

typedef int data_t;

typedef struct list{
	data_t data[MAXSIZE];
	int last;//保存最后一个有效元素的下标
}seqlist;

int isFullSeqList(seqlist *L);
int isemptySeqList(seqlist *L);
seqlist * createSeqList();
int insertSeqList(seqlist * L, int pos, data_t x);
int deleteSeqList(seqlist * L, int pos, data_t *x);
void showSeqlist(seqlist * L);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值