头文件·sequlist.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
typedef int Sldatatype;
typedef struct Sequlist
{
Sldatatype* a;
int size;
int capacity;
}Sl;
void SequlistInit(Sl* ps);
void Sequlistprint(Sl* ps);
void SequlistCheckcapacity(Sl* ps);
void SequlistPushback(Sl* ps, Sldatatype x);
void SequlistPopback(Sl* ps);
void SequlistPushfront(Sl* ps, Sldatatype x);
void SequlistPopfront(Sl* ps);
void Sequlistfind(Sl* ps, Sldatatype x);
void SequlistInsert(Sl* ps, int pos, Sldatatype x);
void Sequlistdel(Sl* ps, int pos);
源文件sequlist.c
#include"sequlist.h"
void SequlistPushback(Sl* ps, Sldatatype x)
{
SequlistCheckcapacity(ps);
ps->a[ps->size] = x;
ps->size++;
}
void Sequlistprint(Sl* ps)
{
for (int i = 0; i < ps->size; ++i)
{
printf("%d ", ps->a[i]);
}
printf("\n");
}
void SequlistCheckcapacity(Sl* ps)
{
if (ps->size == ps->capacity)
{
int newcapacity = ps->size = 0 ? 4 : ps->size * 2;
Sldatatype* tmp = (Sldatatype*)realloc(ps->a, newcapacity * sizeof(Sldatatype));
if (tmp == NULL)
{
printf("realloc fail\n");
exit(-1);
}
ps->a = tmp;
ps->capacity = newcapacity;
}
}
void SequlistPopback(Sl* ps)
{
if (ps->size > 0)
{
ps->size--;
}
}
void SequlistPushfront(Sl* ps, Sldatatype x)
{
SequlistCheckcapacity(ps);
int end = ps->size - 1;
while (end >= 0)
{
ps->a[end + 1] = ps->a[end];
end--;
}
ps->a[0] = x;
ps->size++;
}
void SequlistPopfront(Sl* ps)
{
if (ps->size > 0)
{
for (int begin = 0; begin < ps->size - 1; begin++)
{
ps->a[begin] = ps->a[begin + 1];
}
ps->size--;
}
}
void SequlistInit(Sl* ps)
{
ps->a = NULL;
ps->size = 0;
ps->capacity = 0;
}
void Sequlistfind(Sl* ps, Sldatatype x)
{
int begin;
for (begin = 0; begin < ps->size - 1; begin++)
{
if (ps->a[begin] == x)
{
printf("%d\n", begin);
break;
}
}
if (ps->a[begin] != x)
{
printf("-1\n");
}
}
void SequlistInsert(Sl* ps, int pos, Sldatatype x)
{
SequlistCheckcapacity(ps);
int end = ps->size - 1;
while (end > pos - 1)
{
ps->a[end + 1] = ps->a[end];
--end;
}
ps->a[end + 1] = x;
ps->size++;
}
void Sequlistdel(Sl* ps, int pos)
{
int begin = pos - 1;
while (begin < ps->size - 1)
{
ps->a[begin] = ps->a[begin + 1];
++begin;
}
ps->a[begin] = 0;
ps->size--;
}
#include"sequlist.h"
void Testsequlist1()
{
Sl s1;
SequlistInit(&s1);
SequlistPushback(&s1, 10);
SequlistPushback(&s1, 20);
SequlistPushback(&s1, 30);
SequlistPushback(&s1, 40);
SequlistPushback(&s1, 50);
Sequlistprint(&s1);
SequlistPopback(&s1);
Sequlistprint(&s1);
}
void Testsequlist2()
{
Sl s1;
SequlistInit(&s1);
SequlistPushback(&s1, 10);
SequlistPushback(&s1, 20);
SequlistPushback(&s1, 30);
SequlistPushback(&s1, 40);
SequlistPushback(&s1, 50);
Sequlistprint(&s1);
SequlistPushfront(&s1, 1);
SequlistPushfront(&s1, 2);
SequlistPushfront(&s1, 3);
Sequlistprint(&s1);
SequlistPopfront(&s1);
Sequlistprint(&s1);
Sequlistfind(&s1, 20);
SequlistInsert(&s1,2, 6);
Sequlistprint(&s1);
Sequlistdel(&s1, 4);
Sequlistprint(&s1);
}
int main()
{
//Testsequlist1();
Testsequlist2();
return 0;
}