我是靠谱客的博主 机灵汉堡,最近开发中收集的这篇文章主要介绍线性表(顺序存储结构)C语言前言一、线行表的顺序存储结构二、代码三、运行结果,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • 前言
  • 一、线行表的顺序存储结构
  • 二、代码
  • 三、运行结果


前言

最近在学数据结构,想在这里记录一下,也方便以后查找

一、线行表的顺序存储结构

线性表分为两种存储结构,顺序存储与链式存储。
顺序存储就是用一维数组来实现的。一维数组的下标与元素在线性表中的序号对应。

二、代码

1.引用头文件与宏定义:

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

#define OK   1
#define ERROR  0
#define TRUE 1
#define FALSE 0

#define	MAXSIZE  100
typedef int ElemType;

2.对线性表的定义:

typedef  struct
{
	ElemType  elem[MAXSIZE];  /*线性表占用的数组空间*/
	int       last;    /*记录线性表中最后一个元素在数组elem[ ]中的位置(下标值),空表置为-1*/
}SeqList;

3.读取第i个位置上的值:

int GetElem(SeqList L, int i, ElemType *e)
{
	if (i<1 || i>L.last)
		return ERROR;
	*e = L.elem[i - 1];
	return OK;
}

4.元素e的位置:

int  Locate(SeqList L, ElemType e)
{
	int i = 0;        /*i为扫描计数器,初值为0,即从第一个元素开始比较*/
	while ((i <= L.last) && (L.elem[i] != e))		/*顺序扫描表,直到找到值为key的元素, 或扫描到表尾而没找到*/
		i++;

	if (i <= L.last)
		return(i + 1);  /*若找到值为e的元素,则返回其序号*/
	else
		return(-1);  /*若没找到,则返回空序号*/
}

5.在顺序表L中第i个数据元素之前插入一个元素e。:

int  InsList(SeqList* L, int i, ElemType e)
{
	int k;
	if ((i < 1) || (i > L->last + 2)) /*首先判断插入位置是否合法*/
	{
		printf("插入位置i值不合法");
		return(ERROR);
	}
	if (L->last >= MAXSIZE - 1)
	{
		printf("表已满无法插入");
		return(ERROR);
	}
	for (k = L->last;k >= i - 1;k--)   /*为插入元素而移动位置*/
		L->elem[k + 1] = L->elem[k];
	L->elem[i - 1] = e;   /*在C语言数组中,第i个元素的下标为i-1*/
	L->last++;
	return(OK);
}

6.在顺序表L中删除第i个数据元素:

int  DelList(SeqList* L, int i, ElemType* e)
/*在顺序表L中删除第i个数据元素,并用指针参数e返回其值。i的合法取值为1≤i≤L.last+1 */
{
	int k;
	if ((i < 1) || (i > L->last + 1))
	{
		printf("删除位置不合法!");
		return(ERROR);
	}
	*e = L->elem[i - 1];  /* 将删除的元素存放到e所指向的变量中*/
	for (k = i; k <= L->last; k++)
		L->elem[k - 1] = L->elem[k];  /*将后面的元素依次前移*/
	L->last--;
	return(OK);
}

7.显示顺序表L中的数据元素:

void Display(SeqList L)
/*显示顺序表L中的数据元素*/
{
	int i;
	for (i = 0; i <= L.last; i++)
	{
		printf("%d  ", L.elem[i]);
	}
	printf("n");
}

8.主函数:

void main()
{
	SeqList* l;
	int p, r, q;
	int* e;
	int i;
	l = (SeqList*)malloc(sizeof(SeqList));
	e = (int*)malloc(sizeof(int));
	printf("请输入线性表的长度:");
	scanf("%d", &r);
	l->last = r - 1;
	printf("请输入线性表的各元素值:n");
	for (i = 0; i <= l->last; i++)
	{
		scanf("%d", &l->elem[i]);
	}
	/*在顺序表中查找*/
	printf("请输入要查找的元素值:n");
	scanf("%d", &q);
	p = Locate(*l, q);
	if (p == -1)
		printf("在此线性表中没有该元素!n");
	else
		printf("该元素在线性表中的位置为:%dn", p);
	/*顺序表的插入操作*/
	printf("请输入要插入的位置:n");
	scanf("%d", &p);
	printf("请输入要插入的元素值:n");
	scanf("%d", &q);
	InsList(l, p, q);
	printf("插入后的顺序表为:");
	Display(*l);

	/*顺序表的删除操作*/
	printf("请输入要删除的元素位置:n");
	scanf("%d", &p);
	DelList(l, p, e);
	printf("删除后的顺序表为:");
	Display(*l);
	printf("删除的元素值为:%dn", *e);
}

三、运行结果

在这里插入图片描述

最后

以上就是机灵汉堡为你收集整理的线性表(顺序存储结构)C语言前言一、线行表的顺序存储结构二、代码三、运行结果的全部内容,希望文章能够帮你解决线性表(顺序存储结构)C语言前言一、线行表的顺序存储结构二、代码三、运行结果所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(65)

评论列表共有 0 条评论

立即
投稿
返回
顶部