顺序链表的基本操作

头文件

#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);
	
}

猜你喜欢

转载自blog.csdn.net/qq_44685867/article/details/114480967