介绍
静态顺序表数据的增删查改及其演示过程:
1.头文件部分
#pragma once
#include <stdio.h>
//顺序表
//数据的 增 删 查 改;
//定义一个静态顺序表
#define N 10
#include <string.h>
#include <assert.h>
typedef int SQDataType;
//静态顺序表
typedef struct SeqList
{
SQDataType arr[N];
int size;
}SL;
//静态顺序表初始化数据
void SeqListInit(SL* sl);
//静态顺序表尾插数据
void SeqListPushBack(SL* sl, SQDataType x);
//静态顺序表头插数据
void SeqListPushFront(SL* sl, SQDataType x);
//静态顺序表尾删数据
void SeqListPopBack(SL* sl);
//静态顺序表头删数据
void SeqListPopFront(SL* sl);
//静态顺序表的打印
void SeqListPrint(SL* sl);
//静态顺序表的中插
void SeqListInsert(SL* sl, int pos, SQDataType x);
//需要插入的下标
//静态顺序表的随机删除
void SeqListErase(SL* sl, int pos);
//需要删除的下标
2.函数定义
#define _CRT_SECURE_NO_WARNINGS 1
#include "SeqList.h"
void SeqListInit(SL* sl)
{
memset(sl->arr, 0, sizeof(SL));
}
void SeqListPushBack(SL* sl, SQDataType x)
{
assert(sl->size <= N);
sl->arr[sl->size] = x;
sl->size++;
}
void SeqListPushFront(SL* sl, SQDataType x)
{
assert(sl->size <= N);
int tmp = sl->size;
while (tmp > 0)
{
sl->arr[tmp] = sl->arr[tmp - 1];//将所有的数据向后挪一格
tmp--;
}
sl->arr[tmp] = x;
sl->size++;
}
void SeqListPopBack(SL* sl)
{
assert(sl->size > 0);
sl->size--;
}
void SeqListPopFront(SL* sl)
{
assert(sl->size > 0);
//头删:将所有的数据往前挪一格,再把有效大小减一;
int tmp = 0;
while (tmp < sl->size)
{
sl->arr[tmp] = sl->arr[tmp + 1];
tmp++;
}
sl->size--;
}
void SeqListPrint(SL* sl)
{
int i = 0;
for (i = 0; i < sl->size; i++)
{
printf("%d ", sl->arr[i]);
}
printf("\n");
}
void SeqListInsert(SL* sl, int pos, SQDataType x)
{
if (pos >= sl->size)
{
perror("pos");
exit(-1);
}
assert(sl->size < N);
int tmp = sl->size;
while (tmp > pos)
{
sl->arr[tmp] = sl->arr[tmp - 1];
tmp--;
}
sl->arr[pos] = x;
sl->size++;
}
void SeqListErase(SL* sl, int pos)
{
assert(sl->size > 0);
int tmp = sl->size;
while (tmp > pos)
{
sl->arr[tmp - 1] = sl->arr[tmp];
}
sl->size--;
}
3.主函数及测试过程
#include "SeqList.h"
void TestSeqList()
{
SL sl;
SeqListInit(&sl);
SeqListPushBack(&sl, 1);
SeqListPushBack(&sl, 2);
SeqListPushBack(&sl, 3);
SeqListPushBack(&sl, 4);//尾插1,2,3,4;————1,2,3,4;
SeqListPrint(&sl);
SeqListPushFront(&sl, 5);
SeqListPushFront(&sl, 7);
SeqListPushFront(&sl, 6);//头插5,7,6;——————6,7,5,1,2,3,4;
SeqListPrint(&sl);
SeqListPopBack(&sl);//尾删一次————6,7,5,1,2,3;
SeqListPrint(&sl);
SeqListPopBack(&sl);//再尾删一次————6,7,5,1,2;
SeqListPrint(&sl);
SeqListPopFront(&sl);//头删一次————7,5,1,2;
SeqListPrint(&sl);
SeqListInsert(&sl, 2, 8);//7,5,8,1,2;
SeqListPrint(&sl);
SeqListInsert(&sl, 3, 8);//7,5,8,8,1,2;
SeqListPrint(&sl);
}
int main()
{
TestSeqList();
return 0;
}