"seqlist.h"头文件
#pragma once
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#define data_max 3
typedef int datatype;
typedef struct seqlist
{
datatype *date;//数据
datatype size;
datatype capacity;
}seqlist;
void seqlistinit(seqlist *ps);//初始化
void seqlistdestory(seqlist *ps); //销毁
void SeqListclear(seqlist *ps);//清空
void checkcapacity(seqlist *ps);//扩容
void seqlistpushback(seqlist *ps,datatype x);//尾插
void seqlistpopback(seqlist *ps);//尾删
void seqlistsort(seqlist *ps);//排序
void seqlistpushfront(seqlist *ps,datatype x);//头插
void seqlistpopfront(seqlist *ps);//头删
// 在顺序表pos位置插入值为data的元素
void seqlistInsert(seqlist* ps, int pos, datatype data);
//在顺序表中查找值为x的元素,找到返回该元素在顺序表中的下标,否则返回-1
int seqlistfind(seqlist *ps,datatype x);
// 在顺序表pos位置插入值为data的元素
void SeqListInsert(seqlist * ps, int pos, datatype data);
// 删除顺序表中pos位置上的元素
void SeqListErase(seqlist *ps, int pos);
seqlist.c 源代码
#include "seqlist.h"
void seqlistinit(seqlist *ps) {//初始化
ps->capacity = data_max;
ps->size = 0;
datatype *tmp = NULL;
tmp = (datatype*)malloc(data_max * sizeof(ps->date));
ps->date = tmp;
}
void checkcapacity(seqlist *ps) {//扩容
if (ps->size== ps->capacity) {
datatype *tmp = (datatype*)realloc(ps->date, (ps->capacity + data_max) * sizeof(ps->date));
if (ps->date == NULL)
{
perror("realloc error:");
exit(EXIT_FAILURE);
}
ps->date = tmp;
ps->capacity = ps->capacity + data_max;
}
}
void seqlistpushfront(seqlist *ps, datatype x) {//头插
assert(ps);
checkcapacity(ps);
if (ps->size == 0) {
ps->date[0] = x;
ps->size++;
}
else {
for (int i = ps->size-1; i >= 0; i--) {
ps->date[i + 1] = ps->date[i];
}
ps->date[0] = x;
ps->size++;
}
}
void seqlistpopfront(seqlist *ps) {//头删
assert(ps);
if (ps->size == 0) {
printf("顺序表无元素\n");
}
else if (ps->size == 1) {
ps->size--;
}
else {
for (int i = 1; i < ps->size; i++) {
ps->date[i - 1] = ps->date[i];
}
ps->size--;
}
}
void seqlistpushback(seqlist *ps, datatype x) {//尾插
assert(ps);
checkcapacity(ps);
ps->size++;
ps->date[ps->size - 1] = x;
}
void seqlistpopback(seqlist *ps) {//尾删
ps->size--;
}
//在顺序表中查找值为data的元素,找到返回该元素在顺序表中的下标,否则返回-1
int seqlistfind(seqlist *ps, datatype x) {
for (int i =0; i < ps->size; i++) {
if (ps->date[i] == x) {
return i;
}
}
return - 1;
}
// 在顺序表pos位置插入值为data的元素
void seqlistInsert(seqlist* ps, int pos, datatype x) {
ps->size++;
assert(ps);
checkcapacity(ps);
int i = ps->size - 1;
for (; i>pos; i--) {
ps->date[i] = ps->date[i - 1];
}
ps->date[i] = x;
}
swap(datatype*p1, datatype*p2) {
datatype tmp = *p1;
*p1 = *p2;
*p2 = tmp;
}
void seqlistsort(seqlist *ps) {//排序
int flag = 0;
for (int i = 0; i < ps->size-1; i++) {
flag = 0;
for (int j = 0; j < ps->size-1 - i; j++) {
if (ps->date[j] > ps->date[j + 1]) {
swap(ps->date + j, ps->date + j + 1);
flag = 1;
}
}
if (flag == 0)
return;
}
}
void SeqListclear(seqlist *ps) {//清空
assert(ps);
ps->size = 0;
}
void seqlistdestory(seqlist *ps) {//销毁
assert(ps);
free(ps);
ps = NULL;
}
测试文件text.c
#include "seqlist.h"
int main() {
seqlist arr;
seqlist *ps=&arr;
seqlistinit(ps);
seqlistpushfront(ps, 1);
seqlistpushfront(ps, 1);
seqlistpushfront(ps, 7);
seqlistpushfront(ps, 1);
seqlistpushfront(ps, 1);
seqlistpushfront(ps, 8);
seqlistpushfront(ps, 1);
seqlistpushfront(ps, 1);
seqlistpushfront(ps, 1);
seqlistpushfront(ps, 1);
seqlistpushfront(ps, 1);
seqlistpushfront(ps, 5);
seqlistpushfront(ps, 4);
seqlistpushfront(ps, 1);
seqlistpushfront(ps, 1);
seqlistpushfront(ps, 45);
seqlistpopback(ps);
seqlistpushfront(ps, 45);
seqlistpopfront(ps);
/*int n=seqlistfind(ps, 1);
printf("%d\n", n);*/
seqlistInsert(ps, 3, 7);
seqlistsort(ps);
//seqlistclear(ps);
//seqlistdestory(ps);
for (int i = 0; i < ps->size; ++i) {
printf("%d\n", ps->date[i]);
}
system("pause");
}