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");
}
代码运行结果如下