概述
文章目录
- 前言
- 一、线行表的顺序存储结构
- 二、代码
- 三、运行结果
前言
最近在学数据结构,想在这里记录一下,也方便以后查找
一、线行表的顺序存储结构
线性表分为两种存储结构,顺序存储与链式存储。
顺序存储就是用一维数组来实现的。一维数组的下标与元素在线性表中的序号对应。
二、代码
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语言前言一、线行表的顺序存储结构二、代码三、运行结果所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复