基于Linux的C语言

这篇博客详细介绍了在Linux系统中使用C语言实现线性表中的顺序表操作,包括顺序表的声明、创建、数据存满判断、数据添加、插入、空表判断、元素删除、修改、查找及显示顺序表的完整过程。通过这些操作,读者可以深入理解数据结构中的顺序表概念及其应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

数据结构

目录

一,线性表

二,顺序表

       1, 顺序表的声明:

       2, 顺序表的创建:

       3, 判断顺序表中的数据是否存满。

       4, 数据的添加:

        5,数据的插入:首先从数据的最后一个开始依次向后移动一个地址直到满足要插入的位置为止。

        6,判断数据是否为空

        7,  删除某个元素:将要删除的元素的位置的后一个元素向左移动一个位置即可。 

        8,  修改某个元素:利用下标直接更改

        9,查找元素:通过循环语句进行判断

       10,显示整个顺序表


数据结构:就是根据需要存储的数据,选择具体的逻辑结构与存储结构⽤来 存储数据。

一,线性表

        概念:在存储的数据程序中,数据之间存在着一定的先后顺序的结构就叫做线性表。

        特点:

                ①:有唯一的第一个元素,也只有唯一的最后一个元素

                ②:元素之间有先后顺序。

                ③:中间数据有且只有一个前驱和后继。

二,顺序表

        概念:用来存储具有先后顺序的数据。

       1, 顺序表的声明:

//声明类型  顺序表
struct list
{
        int data[10];
        int num;
};
~                                                                                                   
~  

       2, 顺序表的创建:

struct list
{
	int data[10];
	int num;
};

//创建顺序表
struct list * create()
{
	struct list *slist = malloc(sizeof(struct list))	//申请空间,创建顺序表。
	
	slist->num = 0;	//->代表的含义是指针访问数据。 设置当前存储的数据为0个。
	return slist;

}

       3, 判断顺序表中的数据是否存满。

struct list
{
	int data[10];
	int num;
};

//创建顺序表
struct list * create()
{
	struct list *slist = malloc(sizeof(struct list))	//申请空间,创建顺序表。
	
	slist->num = 0;	//->代表的含义是指针访问数据。 设置当前存储的数据为0个。
	return slist;

}

//判断顺序表中的数据是否存满。
int full(struct list *p)	//访问数据地址中的数据
{
	if (p->num==10)
	{
		printf("FULL");//如果顺序表中的数据满了则返回1.
		return 1;
	}
	else
	{
		return 0;	//如果顺序表中的数据没满则返回0.
	}
}

 

       4, 数据的添加:

//声明类型  顺序表
struct list
{
	int data[10];
	int num;
};

//创建顺序表
struct list * create()
{
	struct list *slist = malloc(sizeof(struct list))	//申请空间,创建顺序表。
	
	slist->num = 0;	//->代表的含义是指针访问数据。 设置当前存储的数据为0个。
	return slist;

}
//数据的添加
void add(struct list *p ,int age)	//,int age 代表着在顺序表末尾插入一个数据。
{
	p->data[p->num] = age;		//首先访问data这个数据再在其后追加一个数据。
	p->num++;	//个数加一个
}


//函数的调用
int main()
{

	struct list * head = create();//head指向顺序表
    add(head,需要添加的元素)
}

        5,数据的插入:首先从数据的最后一个开始依次向后移动一个地址直到满足要插入的位置为止。

//插入一个数据
void insert (struct list *p,int age,int pos)	//定义pos 为元素的下标。
{
	//首先判断数据是否存满
	if( full(p) )
		return ;
	//其次判断插入下标在不在已经存储的位置上
	if(pos > p->num-1)
	{	
		printf("pos is error\n");
		return ;
	}
	for (int i=p->num-1;i>=pos;i--)      //首先遍历这个空间,多次循环,直到找到满足条件的数据
	{
		p->data[i+1]=p->data[i];     //找到要插入的位置在这个位置插入要插入的语句。
	}
	p->data[pos]=age;
	
	p->num++;
}

//函数的调用
int main()
{

	struct list * head = create();//head指向顺序表
    insert(head,需要插入的地址下标,需要插入的元素)
}

        6,判断数据是否为空

//判断数据是否为空
int empty(struct list *p)
{
	if(p->num == 0)	//判断有无数据存在。
	{
		printf("is empty\n");
		return 1;	//如果数据不存在则返回为1
	}
	else
		return 0;	//如果数据存在则返回为0

}

      7,  删除某个元素:将要删除的元素的位置的后一个元素向左移动一个位置即可。 

//判断数据是否为空
int empty(struct list *p)
{
	if(p->num == 0)	//判断有无数据存在。
	{
		printf("is empty\n");
		return 1;	//如果数据不存在则返回为1
	}
	else
		return 0;	//如果数据存在则返回为0

}
void del(struct list * p,int pos)
{
	//要删除数据首先得确定数据不能为空
	if( empty(p) )
		return ;

	//其次删除的位置要存在
	if(pos > p->num-1)
	{
		printf("pos is error\n");
		return ;
	}

	//删除
	printf("delete age is %d\n",p->data[pos]);	//打印要删除的数据元素。
	
	for(int i = pos;i < p->num-1;i++)	//利用for循环访问整个数据找到要删除的数据元素的下标地址,找到后直接将要删除的数据元素的后一个元素的地址与前一个元素地址相接,就实现了数据的删除。
	{
		p->data[i] = p->data[i+1];
	}
	p->num--;	//删除一个元素后整个数据的值就会减少一个,所以要执行操作。

}

//函数的调用
int main()
{

	struct list * head = create();//head指向顺序表
    del(head,需要删除的元素地址下标)
}

      8,  修改某个元素:利用下标直接更改

//修改某个元素
void update(struct list *p ,int age,int pos)		//先定义一个修改的元素为age
{

	//要修改某个元素首先的确定改元素的位置要存在
	if(pos > p->num-1)
	{
		printf("pos is error\n");
		return ;
	}

	p->data[pos] = age;	//确定了元素存在直接利用下标修改该值。

}
//函数的调用
int main()
{

	struct list * head = create();//head指向顺序表
    updata(head,当前需要被修改的元素的下标,需要修改后的元素下标)
}

        9,查找元素:通过循环语句进行判断

//查找某个元素
void search(struct list * p,int age)
{

	for(int i = 0;i < p->num;i++)	//访问整个数据
	{
		if(p->data[i] == age)	//判断这个数据是否是当前这个元素,如果是则结束循环,如果都没有这个数据那么则显示没这个数据元素。
		{
			printf("pos is %d  age is %d\n",i,p->data[i]);
			return;
		}
	}

	printf("have no age\n");
}

//函数的调用
int main()
{

	struct list * head = create();//head指向顺序表
    search(head,需要查找的元素)
}

        10,显示整个顺序表

//显示整个顺序表
void show(struct list *p)
{

	for(int i = 0;i < p->num;i++)
	{
		printf("%d ",p->data[i]);
	}
	printf("\n");
}
//函数的调用
int main()
{

	struct list * head = create();//head指向顺序表
    show(head);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值