(未用到class,但是想要用class,只需要简单地改改即可)
SequeList.h
#ifndef __SEQUELIST__H__
#define __SEQUELIST__H__
#include<cstring>
#include<iostream>
#include<assert.h>
#define SLDATESIZE 100
typedef int SLDATETYPE;
typedef struct SL {
SLDATETYPE *a;
int size;
int capacity;
}SL;
void initSL(SL& s);
void SLCheckCapacity(SL&);
void pushBack(SL&,SLDATETYPE);//尾插
void pushFront(SL&, SLDATETYPE);//头插
void popBack(SL&, SLDATETYPE);//尾删
void popFront(SL&, SLDATETYPE);//头删
void insert(SL&, int, SLDATETYPE);//插入
void erase(SL&, SLDATETYPE);//删除
void destory(SL&);//释放空间
void print(SL&);
int find(SL&, SLDATETYPE);
void modify(SL&,int, SLDATETYPE);
#endif
SequeList.cpp
#include"SequeList.h"
using namespace std;
void initSL(SL& s) {
s.a = NULL;
s.size = 0;
s.capacity = 0;
}
void destory(SL& s) {
free(s.a);
s.a = NULL;
s.capacity = 0;
s.size = 0;
}
void print(SL& s) {
for (int i = 0; i < s.size; i++) {
cout << s.a[i] << ' ';
}
}
void SLCheckCapacity(SL& s) {//提高复用性
if (s.capacity == s.size) {
int newSpace = s.capacity == 0 ? 4 : s.capacity * 2;
SLDATETYPE* p = (SLDATETYPE*)realloc(s.a, s.capacity * sizeof(SLDATETYPE));
if (p == NULL) {
cout << "FAIL" << endl;
exit(-1);
}
else {
s.a = p;
s.capacity = newSpace;
}
}
}
void pushBack(SL& s, SLDATETYPE x) {
/*SLCheckCapacity(s);
s.a[s.size] = x;
s.size++;*/
insert(s, s.size, x);//提高复用性
}
void pushFront(SL& s, SLDATETYPE x) {
/*SLCheckCapacity(s);
int end = s.size - 1;
while (end >= 0) {
s.a[end + 1] = s.a[end];
end--;
}
s.a[0] = x;
s.size++;*/
insert(s, 0, x);//提高复用性
}
void popBack(SL& s, SLDATETYPE x) {
assert(s.size > 0);//断言
//s.size--;
erase(s, s.size - 1);//提高复用性
}
void popFront(SL& s, SLDATETYPE x) {
assert(s.size > 0);//断言
/*int end = 1;
while (end <= s.size) {
s.a[end - 1] = s.a[end];
end++;
}
s.size--;*/
erase(s, 0);//提高复用性
}
void insert(SL& s, int pos, SLDATETYPE x) {
assert(pos < s.size);//断言
SLCheckCapacity(s);
int end = s.size - 1;
while (end>=pos) {
s.a[end + 1] = s.a[end];
end--;
}
s.a[pos] = x;
s.size--;
}
void erase(SL& s, int pos) {
assert(pos < s.size);//断言
int end = pos + 1;
while (end <= s.size) {
s.a[end - 1] = s.a[end];
}
s.size--;
}
int find(SL& s, SLDATETYPE x) {
for (int i = 0; i < s.size; i++) {
if (s.a[i] == x) {
return i;
}
}
return -1;
}
void modify(SL& s, int pos, SLDATETYPE x) {
assert(pos < s.size);//断言
s.a[pos] = x;
}