版权声明:转用请注明出处 https://blog.csdn.net/weixin_39411321/article/details/89211767
顺序表基本操作的代码如下:
#include<stdio.h>
#include<iostream>
#include<string>
#include<malloc.h>
#define LIST_INIT_SIZE 10
#define LIST_INC_SIZE 2
typedef enum {
OK = 1, ERROR = -1, POSERROR = -2, INITFAULT = -3, LISTEMPTY = -4, LISTFULL = -5, LISTNULL = -6
}Status;
using namespace std;
typedef int ElemType;
struct SeqList //顺序表的结构
{
ElemType *data;
int cursize;
int maxsize;
};
int Init(SeqList &sp)//初始化顺序表
{
sp.data = (ElemType*)malloc(sizeof(ElemType)*LIST_INIT_SIZE);
if (NULL == sp.data)
{
return INITFAULT;
}
memset(sp.data, 0, sizeof(ElemType)*LIST_INIT_SIZE);
sp.cursize = 0;
sp.maxsize = LIST_INIT_SIZE;
}
void DestroyList(SeqList &st)//摧毁顺序表
{
free(st.data);
st.data = NULL;
st.cursize = 0;
st.maxsize = 0;
}
Status Insert(SeqList &sq, int pos, ElemType val)//按位置插入
{
if (pos<0 || pos>sq.cursize)
return POSERROR;
for (int i = sq.cursize; i > pos; i--)
{
sq.data[i] = sq.data[i - 1];
}
sq.data[pos] = val;
sq.cursize += 1;
return OK;
}
bool Inc_Size(SeqList &seq) //顺序表的扩容
{
ElemType *newdata = (ElemType*)malloc(sizeof(ElemType)*seq.maxsize*LIST_INC_SIZE);//开辟新内存
if (NULL == newdata)//判断是否开辟成功
{
return false;
}
memmove(newdata, seq.data, sizeof(ElemType)*seq.maxsize);
free(seq.data);
seq.data = newdata;
seq.maxsize = LIST_INC_SIZE * seq.maxsize;
return true;
}
int Getsize(SeqList &seq)//得到顺序表的大小
{
return seq.cursize;
}
int GetCapacity(SeqList &seq)//得到顺序表的容量
{
return seq.maxsize;
}
bool EmptyList(SeqList &seq)//判断顺序表是否空
{
return Getsize(seq) == 0;
}
bool FullList(SeqList &seq)//判断顺序表是否满
{
return Getsize(seq) == seq.maxsize;
}
void Push_Back(SeqList &seq, ElemType val) //顺序表的尾部插入;
{
Insert(seq, seq.cursize, val);
}
void Push_Front(SeqList &seq, ElemType val) //顺序表的头部插入;
{
Insert(seq, 0, val);
}
Status EraseList(SeqList &seq, int pos)//按位置删除顺序表的值;
{
if (EmptyList(seq))
{
return LISTNULL;
}
if (pos < 0 || pos >= seq.cursize)
{
return POSERROR;
}
for (int i = pos; i < seq.cursize - 1; i++)
{
seq.data[i] = seq.data[i + 1];
}
seq.cursize -= 1;
return OK;
}
Status Remove(SeqList &seq, ElemType val)//按值删除顺表;
{
for (int i = 0; i < seq.cursize; i++)
{
if (seq.data[i] == val)
EraseList(seq, i);
}
return OK;
}
int main()
{
int ar[] = { 12,23,12,23,34,45,56,12,67 };
int n = sizeof(ar) / sizeof(ar[0]);
SeqList mylist;
Init(mylist);
for (int i = 0; i < n; i++)//插入元素
{
Push_Back(mylist, ar[i]);
}
for (int i = 0; i < mylist.cursize; i++)//打印输出元素
{
cout << mylist.data[i] << " ";
}
cout << endl;
int pos=0, val=0;
Insert(mylist,pos,val);//按位置插入
for (int i = 0; i < mylist.cursize; i++)//打印输出元素
{
cout << mylist.data[i] << " ";
}
cout << endl;
Remove(mylist, 12);
for (int i = 0; i < mylist.cursize; i++)//打印输出元素
{
cout << mylist.data[i] << " ";
}
cout << endl;
DestroyList(mylist);
cout << EmptyList(mylist) << endl;
return 0;
}
运行结果对照如下: