本文主要介绍创建一个空的线性表,然后对此线性表进行插入、删除、查找、打印等操作。现在先来介绍什么是线性表:
线性表是具有相同数据类型的n(n>=0)个数据元素的有限序列,其中n为表长,当n=0时,线性表是一个空表。若用L命名线性表,则其一般表示为
L=(a1 , a2,a3,……,ai,ai+1,……,an,)
a1是唯一的“第一个”元素,又称表头元素;an是唯一的“最后一个元素”,又称表尾元素。 除第一个元素外,每个元素有且仅有一个直接前驱。除最后一个元素外,每个元素有且只有一个直接后继。以上就是线性表的逻辑特性,这种线性有序的逻辑结构正式线性表的名字由来。
线性表的特点如下:
(1)表中元素个数有限。
(2)表中元素具有逻辑上的顺序性,表中元素有其先后次序。
(3)表中元素都是数据元素,每个元素都是单个元素。
(4)表中元素的数据类型都相同,这意味着每个元素占有相同大小的存储空间。
(5)表中元素具有抽象性,即仅讨论元素间的逻辑关系,而不考虑元素究竟表示什么内容。
注: 线性表是一种逻辑结构,表示元素之间一对一的相邻关系。顺序表和链表是指存储结构,两者属于不同层面的概念。
————————————————
版权声明:上文为CSDN博主「疯子书生z」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42240729/article/details/109637183
以上是我复制粘贴的,我的大白话估计解释不清楚(。→v←。)
接下来直接上代码(这是我手敲的):
首先是主函数:test.c
#include
#include"sqlist.h"
void test_list()
{
sqlink L;
L = list_create();
if(L == NULL)
return ;
list_insert(L,10,0);
list_insert(L,20,0);
list_insert(L,30,0);
list_insert(L,40,0);
list_insert(L,50,0);//在线表中插入数字
list_insert(L,60,1000);//测试一下插入的位置不正确会怎样
list_show(L);// 打印出来看一下效果
list_length(L);//求一下线性表长度
list_locate(L,10);//在表中查找一个数,看这个数在不在这个表中 ,并打印出它的下标
//list_delete(L,20);//删除一个数
list_delete_1(L,3);//不同于list_delete(),此函数用于删除指定下标的元素
list_free(L);//释放内存
}
int main()
{
test_list();
return 0;
}
注意了,删除某个元素我封装了两个函数,详情参考代码注释。
下面是sqlist.h
#define N 128
typedef int data_t;//
typedef struct {
data_t data[N];
int last;
}sqlist,*sqlink;
//typedef int data_t;
sqlink list_create();// 创建一个线性表
int list_clear(sqlink L);//给创建的线性表清零,参数表示清空那个线性表
int list_empty(sqlink L);// 清空以后判断是否已经清空
int list_length(sqlink L); //求线性表的长度
int list_locate(sqlink L,data_t value);//定位操作,查找某一个元素(value)是否在这个线性表(L)中
int list_insert(sqlink L,data_t value,int pos);//在线性表L中插入value元素,插入位置是pos
int list_show(sqlink L);//打印服务器托管网出线性表
int list_delete(sqlink L,data_t value);//删除线性表中的某个数
int list_free(sqlink L); //释放内存
int list_delete_1(sqlink L, int pos); //删除指定位置(下标)的元素
最后一个sqlist.c
#include
#include"sqlist.h"
#include
#include
sqlink list_create()
{
//申请动态内存
sqlink L;
L = (sqlink)malloc(sizeof(sqlist));
//判断申请的动态内存是否申请成功
if(L == NULL)
{
printf("list malloc failedn");
return L;
}
memset(L,0,sizeof(sqlist));//从L开始的sizeof(sqlist)个字节,全部用0填充
L->last = -1; //L-last代表最后一个元素的下标,设置为-1(元素的下标不可能为-1)代表最后一个元素无效
return L;
}// 创建一个线性表
int list_clear(sqlink L)
{
if(L == NULL)
return -1;
memset(L,0,sizeof(sqlist));//从L开始的sizeof(sqlist)个字节,全部用0填充
L->last = -1;
return 0;
}//给创建的线性表清零,参数表示清空哪个线性表
int list_empty(sqlink L)
{
if(L->last == -1)
return 1;
else
return 0;
return 0;
}// 清空以后判断是否已经清空
int list_length(sqlink L)
{
if(L == NULL)
return -1;
else
{//return (L->last+1);
printf("the length is %dn",L->last+1);
return (L->last+1);
}
}//求线性表的长度
int list_locate(sqlink L,data_t value)
{
int i;
for(i = 0; i last+1; i++)
{
if(value==L->data[i])
{
printf("the value is in the list:%dn",i);
return 0;
}
}
printf("the value is not in list");
return 0;
//return 0;
}//定位操作,查找某一个元素(value)是否在这个线性表(L)中
int list_insert(sqlink L,data_t value,int pos)
{
int i;
//检查线性表是否已经满了
if(L->last == N-1)
{
printf("list is fulln");
return -1;
}
//检查需要插入的位置(pos)是否合法
if(pos L->last+1)
{
printf("the %d pos is invalidn",pos);
return -1;
}
//将pos后面的依次数据往右移动
for(i = L->last; i>= pos; i--)
{
L->data[i+1] = L->data[i];
}
//更新last下标的元素
L->data[pos] = value;
L->last++;
return 0;
}//在线性表L中插入value元素,插入位置是pos
int list_show(sqlink L)//打印出线性表
{
int i;
if(L == NULL)
return -1;
//检查线性表是否为空
if(L->last == -1)
printf("list is emptyn");
//循环打印出线性表里的值
for(i = 0; i last; i++)
{
printf("%d ",L->data[i]);
}
//puts("");
return 0;
}
int list_delete(sqlink L,data_t value)
{
int i;
if(L==NULL)//检查线性表是否为空
return -1服务器托管网;
for(i = 0; i last+1; i++)//第一个循环是用来找到需要删除的数
{
if(value == L->data[i])
{
int j;
for(j = i;j last+1;j++)//第二个循环是进行删除操作,然后将后面的数往前移动
{
L->data[j] = L->data[j+1];
}
L->last--;//删除了一个数,下标也要减一 ,如果需要删除的数不在表中,下标不变
list_show(L);
return 0;
}
}
list_show(L);//如果删除的数不在线性表中,也打印出来
return 0;
}
int list_free(sqlink L)
{
if(L==NULL)//检查线性表是否为空
return -1;
free(L);
L = NULL;
return 0;
}
int list_delete_1(sqlink L, int pos)
{
int i;
if(pos L->last)//判断删除的位置(下标)是否合法
{
printf("the %d pos is invalidn",pos);
return -1;
}
for(i = pos; i last+1; i++)
{
L->data[i] = L->data[i+1];
}
L->last--;//
list_show(L);
return 0;
}
代码都不难而且我的注释相当详细,应该都是能看懂的,最后就是我的调试结果:
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.fwqtg.net
1.1 正则表达式的概念及演示 在Java中,我们经常需要验证一些字符串,例如:年龄必须是2位的数字、用户名必须是8位长度而且只能包含大小写字母、数字等。正则表达式就是用来验证各种字符串的规则。它内部描述了一些规则,我们可以验证用户输入的字符串是否匹配这个规则…