头文件
函数申明以及结构体的定义
#ifndef _SEQLIST_H
#define _SEQLIST_H
#define N 32
typedef int data_t;
typedef struct seqlist{ //在堆区手动开辟一个存储空间(表空间)
data_t buf[N];
int last;
}Seqlist;
Seqlist *Create_Seqlist();//创建表
void Seqlist_Insert_Pos(Seqlist *seq,int pos,data_t data);//插入元素
int Seqlist_Is_Full(Seqlist *seq);//判断seq表是否还有空位
void Seqlist_Delete1(Seqlist *seq,int pos);//按位置删除表中元素
void Seqlist_Delete2(Seqlist *seq,int data); //按元素值删除表中元素
int Seqlist_Find(Seqlist *seq,int pos);//按位置查找元素
void Seqlist_Change(Seqlist *seq,int pos,int data); //按位置修改表中元素
#endif
函数模块
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <strings.h>
#include "seqlist.h"
Seqlist *Create_Seqlist() //创建表
{
Seqlist *seq=(Seqlist *)malloc(sizeof(Seqlist));//手动为创建的表分配空间
if(seq == NULL){
printf("表创建失败!!\n");
return;
}else{
printf("创建成功!\n");
}
seq->last = -1; //last为表尾值,刚创建的表为空表,last置为-1
// printf("seq->last = %d\n",seq->last); 测试seq->last值
return seq;
}
int Seqlist_Is_Full(Seqlist *seq){ //判断该表是否为满表
// printf("%d\n",seq->last);
if(seq->last == N-1){
printf("该表已满!!\n");
return 1;
}else{
// printf("该表不满!%d \n");
return 0;
}
}
void Seqlist_Insert_Pos(Seqlist *seq,int pos,int data) //向表中插入元素
{
int i;
//printf("%d\n",seq->last);
if(Seqlist_Is_Full(seq) == 0){ //判断表不为满表
// printf("%d\n",seq->last);
if(seq->last == -1){ //判断表是否为空表,为空表则从第一个直接插入
seq->buf[0]=data;
seq->last++;
}else{
if(pos != 0){ //插入位置不能为0,从pos位置开始插入,pos为1则从下标为0处插入
for(i=(seq->last);i>=pos-1;i--){
seq->buf[i+1]=seq->buf[i]; //依次从最后开始移动1位
}
seq->buf[pos-1]=data;
seq->last++;
}
}
}
}
void Seqlist_Show(Seqlist *seq) // 打印表的元素
{
int i=0;
for(i=0;i<=seq->last;i++){
printf("%d ",seq->buf[i]);
}
printf("\n");
}
void Seqlist_Delete1(Seqlist *seq,int pos) //按位置删除表中元素
{
int i;
if(seq->last>=0){//判断该表是否为空表,为空表则不能进行删除操作
for(i=pos;i<=seq->last;i++){
seq->buf[i-1] = seq->buf[i];
}
seq->last--;
}else
printf("该表为空,不能进行删除!!\n");
}
void Seqlist_Delete2(Seqlist *seq,int data) //按元素值删除表中元素
{
int i,j;
for(i=0;i<=(seq->last);i++){ //遍历整个数组
if( seq->buf[i] == data){ //找到值为data的元素
for(j=i;j<=(seq->last);j++){ //记录其下标,将该下标后的元素从前面依次向前移一位
seq->buf[j] = seq->buf[j+1];
}
}
}
seq->last--;
}
int Seqlist_Find(Seqlist *seq,int pos) //按位置查找表中元素
{
int i,n;
for(i=0;i<(seq->last);i++){
if(i == pos){
n = seq->buf[i-1];
}
}
return n;
}
void Seqlist_Change(Seqlist *seq,int pos,int data) //按位置修改表中元素
{
int i;
for(i=0;i<(seq->last);i++){
if(i == pos){
seq->buf[i-1]=data;
}
}
}
主函数
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <strings.h>
#include "seqlist.h"
int main()
{
int pos,data=10;
Seqlist *seq;
seq=Create_Seqlist(); // 创建空表
while(data--){
Seqlist_Insert_Pos(seq,1,data);//向表中插入数据,
}
Seqlist_Show(seq); // 打印表中的元素
Seqlist_Delete1(seq,3);//删除表中第三个位置的元素
Seqlist_Delete2(seq,5);//删除表中值为5的元素
Seqlist_Show(seq); // 打印删除后表中的元素
printf("%d\n",Seqlist_Find(seq,5)); //按位置(5)查找表中元素
Seqlist_Change(seq,3,66);//将第三个元素的值修改为66
Seqlist_Show(seq); // 打印修改后表中的元素
memset(seq->buf,0,sizeof(seq->buf));//将表中元素全部置为0(清空元素)
Seqlist_Show(seq); // 打印清空表后表中的元素
free(seq);//释放mallco申请的内存空间
seq=NULL;//将指针置为空
return 0;
}