#include<stdio.h>
#define false 0
#define ok 1
#define maxsize 10
//定义了线性表的结构
typedef struct {
int list1[maxsize];
int length;
}sqlist;
//初始化线性表
int initlist(sqlist *l)
{
l->length = 0;
return ok;
}
//向线性表插入数据
int listinsert(sqlist *l, int i, int e)
{
int k;
if (i>l->length + 1 || i<1 || i>maxsize) //前两个表示i插入的位置不对,最后一个表示线性表满了
return false;
if (i<l->length) //如果数据不在表尾,后面的数据后移
{
for (k = l->length-1; k>=i-1; k--)
l->list1[k+1] = l->list1[k];
}
l->length++;
l->list1[i - 1] = e;
return ok;
}
//从线性表中删除数据,删除l中第i个元素并返回给e
int listdelete(sqlist *l, int i, int *e)
{
int k;
if (i<1 || i>l->length)
return false;
*e = l->list1[i - 1];
if (i<l->length)
{
for (k = i; k<l->length; k++)
l->list1[k - 1] = l->list1[k];
}
l->length--;
return ok;
}
//查询线性表,将l中第i个元素返回给e
int getelem(sqlist l, int i, int *e)
{
if (i >= l.length)
return false;
else
{
*e = l.list1[i-1];
return ok;
}
}
//显示线性表
int seelist(sqlist l)
{
int i;
for (i = 0; i < l.length; i++)
printf("%4d", l.list1[i]);
return ok;
}
int main(void)
{
int i,data;
sqlist s1;
i = initlist(&s1);
if (i == 1)
{
puts("新的线性表创建成功,请输入前五个整数");
for (i = 0; i < 5; i++)
{
listinsert(&s1, i+1, i);
}
}
seelist(s1);
listdelete(&s1, 4, &data);
printf("\n被删除的元素是%d", data);
printf("\n删除元素后的线性表是\n");
seelist(s1);
return 0;
}
此处实现了线性表的插入、删除、查询、显示的功能。
初步涉及结构的调用,一定要注意函数定义和调用结构,如果需要改变结构内的值,函数的参数需使用指针,否则直接调用实例,实例就和以前普通的变量a调用方法一样。比如插入操作改变了s1,这个函数就是int listdelete(sqlist *l, int i, int *e),此处l为指针;显示不需要改变s1,所以int seelist(sqlist l)。(此处指参数只是普通变量,而不是想修改的本身就是指针)