1、自定义一个头文件
#ifndef _list_
#define _list_
#include <stdio.h>
#include <stdlib.h>
typedef struct list //顺序表取别名叫 LIST
{
int *date; //指向数据域 --数组
int length; //计算顺序表的长度
int size; //顺序表的大小
} LIST;
extern LIST *seq_init(void); //初始化
extern void seq_insert(LIST *p, int local, int elem); //把数插入指定的位置
extern void seq_display(LIST *p); //遍历
extern void swq_delete(LIST *p, int local); //删除指定位置的数
extern void seq_change(LIST *p, int local, int elem); //修改指定位置的数
extern int seq_local(LIST *p, int elem); //查询某个数的位置
#endif
2、函数文件
#include "list.h"
//初始化顺序表 顺序表本质用的是数组
LIST *seq_init(void)
{
LIST *p = (LIST *)malloc(sizeof(LIST));
p->date = (int *)malloc(sizeof(int) * 8);
p->length = 0;
p->size = 8;
return p;
}
//插入一个数据到指定的位置
void seq_insert(LIST *p, int local, int elem) //把 elem插入到p的local中
{
if (local < 1 || local > p->length + 1) //顺序表地址连续 不能跳跃插入
{
printf("插入的位置错误!!!\n");
return;
}
if (p->length == p->size) //如果一开始申请的空间满了 则再原来的基础上继续申请一个
{
p->date = (int *)realloc(p->date, sizeof(int) * (p->size + 1));
p->size++;
}
int i;
for (i = p->length; i >= local; i--) //把要插入的位置之后的数往后移
{
p->date[i] = p->date[i - 1];
}
p->date[local - 1] = elem; //移完之后把空出来的位置赋值
p->length++;
}
//遍历顺序表
void seq_display(LIST *p)
{
int i;
for (i = 0; i < p->length; i++)
{
printf("%d>>", p->date[i]);
}
printf("\n");
}
//删除顺序表中指定位置的数
void swq_delete(LIST *p, int local)
{
if (local < 1 || local > p->length)
{
printf("要删除位置的数错误\n");
return;
}
int i;
for (i = local; i < p->length; i++) //把要插入的位置之后的数全部往前移
{
p->date[i - 1] = p->date[i];
}
p->length--;
}
//改变指定位置顺序表的的数
void seq_change(LIST *p, int local, int elem)
{
if (local < 1 || local > p->length)
{
printf("要改变的数错误\n");
return;
}
p->date[local - 1] = elem;
}
//查询某个数据的位置
int seq_local(LIST *p, int elem)
{
int i;
for (i = 0; i < p->length; i++)
{
if (p->date[i] == elem)
{
return i + 1;
break;
}
}
return 0;
}
3、主函数
#include "list.h"
int main(void)
{
LIST *p = seq_init();
printf("*******增********\n");
for (int i = 0; i < 10; i++)
{
seq_insert(p, i, i);
}
seq_display(p);
printf("*******增********\n");
seq_insert(p, 4, 10);
seq_display(p);
printf("********删*******\n");
swq_delete(p, 4);
seq_display(p);
printf("*********改******\n");
seq_change(p, 4, 45);
seq_display(p);
printf("*********查******\n");
int local;
local = seq_local(p, 45);
printf("%d的位置是%d\n", 45, local);
}