顺序链表的基本操作

本文介绍了使用C/C++实现顺序表的基本数据结构,包括初始化、插入、删除、修改和打印功能。重点展示了如何使用头文件和标准库进行操作,并通过示例展示了如何处理满表、删除重复元素和数据查找等场景。

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

头文件

#ifndef _COMMONHEADER_H_
#define _COMMONHEADER_H_

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#include <strings.h>
#include <time.h>
#include <errno.h>

#include <sys/ipc.h>
#include <sys/sem.h>
#include <sys/shm.h>
#include <sys/msg.h>
#include <sys/wait.h>
#include <semaphore.h>
#include <signal.h>

#include <pthread.h>

#include <arpa/inet.h>
#include <netinet/in.h>
#include <sys/socket.h>

#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <dirent.h>
#define BUF_SIZE 1024
#include <linux/input.h>
#include <sys/mman.h>
#endif

主代码

#include "myhead.h"
#define SIZE 10  //优化1  用宏定义取代数组大小
typedef int datatype;

//定义一个结构体表示顺序表
struct list
{
	datatype buf[SIZE];
	int last; //标记目前数组中最后一个有效成员的下标
};

//初始化顺序表
struct list *list_init()
{
	struct list *mylist=malloc(sizeof(struct list));
	mylist->last=-1;
	return mylist;
}

//插入数据到顺序表中
int list_insert(datatype newdata,struct list *somelist)
{
	//判断顺序表是否满了
	if((somelist->last)>=(SIZE-1))
	{
		printf("顺序表满了!\n");
		return -1;
	}
	//先更新last
	(somelist->last)++;
	somelist->buf[somelist->last]=newdata;
}

//删除顺序表中是数据
/*
	情况一:要删除的数据在顺序表不存在
	情况二:要删除的数据是重复的(多个),全部删除
*/
int list_remove(datatype deldata,struct list *somelist)
{
	//定义一个标志位,标记是否存在要删除的数据
	int flag=0;
	//判断顺序表是否空了
	if(somelist->last==-1)
	{
		printf("顺序表空了!\n");
		return -1;
	}
	//找到要删除的数据
	int i,j;
	for(i=0; i<=somelist->last; i++)
	{
		if(somelist->buf[i]==deldata)
		{
			flag=1;
			//后面的数据往前挪动
			for(j=i; j<=somelist->last-1; j++)  
			{
				somelist->buf[j]=somelist->buf[j+1];
			}
			//更新last
			somelist->last--;	
			i--;  //注意i--是为了防止漏掉重复元素
		}
		
	}
	//判断要删除的数据不存在这种情况
	if(flag==0)
	{
		printf("对不起,没有你要删除的数据!\n");
		return -1;
	}
	
}
//修改数据
/*
	情况一:要修改的数据在顺序表不存在
	
*/
int list_update(int newdata,int olddata,struct list *somelist)
{
	int i;
	//寻找要的修改的数据olddata
	for(i=0; i<=somelist->last; i++)
	{
		if(somelist->buf[i]==olddata)
			somelist->buf[i]=newdata;
	}
}

//打印
int list_show(struct list *somelist)
{
	int i;
	for(i=0; i<=somelist->last; i++)
		printf("当前顺序表中数据是:%d\n",somelist->buf[i]);
}

int main()
{
	int n;
	int i;
	//初始化顺序表
	struct list *mylist=list_init();
	//插入数据
	for(i=0; i<4; i++)
	{
		printf("请输入要插入的整数!\n");
		scanf("%d",&n);
		list_insert(n,mylist);
	}
	//打印
	printf("=======插入完毕======\n");
	list_show(mylist);
	
	//删除
	list_remove(55,mylist);
	//打印
	printf("=======删除完毕======\n");
	list_show(mylist);
	
	//修改数据
	//list_update(99,88,mylist);
	//打印
	//printf("=======修改完毕======\n");
	//list_show(mylist);
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

灬逆时针灬诺言

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值