一、定义部分
在实现顺序表的时候我们可以将代码放在全部放在.h文件里,今天我给大家带来的是顺序表的增删改查。
#pragma once
#include<iostream>
using namespace std;
#define initsize 4
#include<stdlib.h>
typedef int q;
#include<assert.h>
typedef struct {
q *data;
int size;
int maxsize;
}list;
void initlist(list* p);//初始化
void addsize(list* p);//分配空间
void addlist(list* p, int x);//尾插数字
void pushaddlist(list* p, int x);//头插数字
void dellist(list* p);//尾删数字
void pushdellist(list* p);//头删数字
void anaryaddlist(list* p,int x,int pos);//插任意位置数字
void anarydellist(list* p,int pos);//删任意位置数字
int find1list(list* p, q x);//查找数字
void modify2list(list* p, int pos,int x);//修改数字
二、顺序表初始化
#include"标头.h"
void initlist(list* p) {//初始化
p->data = NULL;
p->size = 0;
p->maxsize =0;
}
三、动态扩容
void addsize(list* p) {//动态空间分配
if (p->size == p->maxsize) {
int newmaxsize = p->maxsize == 0 ? 4 : p->maxsize * 2;
q* tmp = (q*)realloc(p->data, newmaxsize * sizeof(list));
if (tmp == NULL) {
cout << "realloc fail" << endl;
exit(-1);
}
else {
p->data = tmp;
p->maxsize = newmaxsize;
}
}
}
四、尾插数字
void addlist(list* p,int x) {//尾插数字
addsize(p);
p->data[p->size] = x;
p->size++;
}
五、头插数字
void pushaddlist(list* p, int x) {//头插数字
addsize(p);
int end = p->size - 1;
while (end>=0) {
p->data[end + 1] = p->data[end];
end--;
}
p->data[0] = x;
p->size++;
}
六、在任意位置插数据
void anaryaddlist(list* p, int pos, int x) {//插任意数字
assert(p->size > pos);
addsize(p);
int end = p->size - 1;
while (end >=pos) {
p->data[end + 1] = p->data[end];
end--;
}
p->data[pos] = x;
p->size++;
}
七、在任意位置删数据
void anarydellist(list* p, int pos) {//删任意数字
assert(p->size > pos);
int start=pos+1;
while (start < p->size) {
p->data[start-1] = p->data[start];
start++;
}
p->size--;
}
八、查找数字
int find1list(list* p, q x) {//查找数字
for (int i = 0; i < p->size; i++) {
if (p->data[i] == x) {
return i;
}
}
return -1;
}
九、修改数字
void modify2list(list* p, int pos,int x) {//修改数字
assert(p->size > pos);
p->data[pos] = x;
}
十、销毁空间
void destory(list* p) {//销毁空间
free(p->data);
p->data = NULL;
p->size=p->maxsize = 0;
}