顺序表
练习时写的,增、删、改、查 都有,看看就好。
代码入下:
运行环境:VS2019
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#define MaxSize 10
typedef int ElemType;
/*静态分配*/
typedef struct {
ElemType data[MaxSize];
int length;
}SqList;
/*动态分配*/
//#define InitSize 10//默认的最大长度
//typedef struct{
// int* data;
// int MaxSize;//顺序表的最大容量
// int length;//顺序表当前的长度
//}SeqList;
/*动态分配的初始化*/
//void InitList(SeqList& L)
//{
// L.data = (int*)malloc(InitSize * sizeof(int));
// L.length = 0;
// L.MaxSize = InitSize;
//}
void InitList(SqList& L)//就是把数组中的所有元素置空
{
for (int i=0; i < MaxSize; i++)
L.data[i] = 0;
L.length = 0;
}
//1 3 5 7 9 11
bool CreatList(SqList& L,int len)
{
if (len<0 || len>MaxSize)
return false;
for (int i = 0; i <len; i++)
{
scanf("%d", &L.data[i]);
L.length++;
}
return true;
}
bool IsEmpty(SqList L)
{
if (L.length >= MaxSize)
return true;//空间满了
return false;
}
bool ListInsert(SqList& L, int pos,ElemType e)//pos为坐标
{
if (pos < 0 || pos >L.length)
return false;
if (IsEmpty(L))
return false;
for (int j = L.length-1; j >= pos; j--)
L.data[j+1] = L.data[j];
L.data[pos] = e;
L.length++;
}
void Printf(SqList L)
{
for (int i = 0; i < L.length; i++)
printf("%-3d", L.data[i]);
printf("\n");
}
bool List_delect(SqList& L, int pos, ElemType &e)
{
if (pos < 0 || pos >L.length-1)
return false;
e = L.data[pos];
for (int j = pos; j < L.length-1; j++)
L.data[j] = L.data[j + 1];
L.length--;
return true;
}
int GetElem(SqList L, int pos)
{
return L.data[pos];
}
int LocatElem(SqList L, ElemType e)
{
for (int i = 0; i < L.length - 1; i++)
if (L.data[i] == e)
return i;
return -1;
}
int main()
{
SqList L;
InitList(L);//初始化顺序表
int len = 6;//在前面x个位置上填上数据
CreatList(L,len);
Printf(L);
ListInsert(L, 3, 8);//在第3个位置插入8这个数据
Printf(L);
ElemType e = -1;
List_delect(L, 6, e);//删除第3个位置的数据,返回删除的数据
Printf(L);
printf("value=%d", GetElem(L, 3));//按位查找
printf("\n");
printf("pos=%d", LocatElem(L, 3));//按值查找
return 0;
}