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