text.h
#pragma once
#include<stdio.h>
#include<stdlib.h>
#include<assert.h>
#include<string.h>
#define MAX_SIZE 10
typedef int DataType;
typedef struct Seqlist
{
DataType array[MAX_SIZE]; //存储数据的数组
size_t size; //存储数据的个数
}SeqList;
void Init(SeqList *seq);//初始化顺序表
void Destory(SeqList *seq);//销毁顺序表
void Print(SeqList *seq);//打印顺序表
void PushBack(SeqList *seq, DataType x);//尾部插入数字
void PopBack(SeqList *seq, DataType x);//尾部删除数字
void PushFront(SeqList *seq, DataType x);//头部插入数字
void PopFront(SeqList *seq, DataType x);//头部删除数字
void Insert(SeqList *seq, size_t pos,DataType x);//
void Remove(SeqList *seq, DataType x);
void Erase(SeqList *seq, DataType x);
int find(SeqList *seq, DataType x);
void Removeall(SeqList *seq, DataType x);
void BubblesSort(SeqList *seq);//冒泡排序
void SelectSort(SeqList *seq);//选择排序
void InsertSort(SeqList *seq);//插入排序
text.c
#include"text.h"
void Init(SeqList *seq)//初始化顺序表
{
assert(seq);
memset(seq->array, 0, sizeof(DataType)*MAX_SIZE);
seq->size = 0;
}
void Destory(SeqList *seq)//销毁顺序表
{
assert(seq);
memset(seq->array, 0, sizeof(DataType)*MAX_SIZE);
seq->size = 0;
}
void Print(SeqList *seq)//打印顺序表
{
for (size_t i = 0; i < seq->size; i++)
{
printf("%d ", seq->array[i]);
}
printf("\n");
}
void PushBack(SeqList *seq, DataType x)//尾部插入数字
{
assert(seq);
if (seq->size >= MAX_SIZE)
{
printf("list is full!\n");
return;
}
else
{
seq->array[seq->size] = x;
seq->size++;
}
}
void PopBack(SeqList *seq, DataType x)//尾部删除数字
{
assert(seq);
if (seq->size == 0)
{
printf("list is empty!\n");
return;
}
else
{
seq->size--;
}
}
void PushFront(SeqList *seq, DataType x)//头部插入数字
{
assert(seq);
if (seq->size+1 >= MAX_SIZE)//数组的下标是从0开始的
{
printf("list is full!\n");
return;
}
else
{
seq->size++;
for (int i = seq->size; i > 0; i--)//i的值从最后面开始
{
seq->array[i] = seq->array[i - 1];//将数组的倒数第二个数字往最后面移动,依次往前,直到数组的下标到0的时候
}
seq->array[0] = x;//将x的值赋值给数组的第一个
}
}
void PopFront(SeqList *seq, DataType x)//头部删除数字
{
assert(seq);
if (seq->size == 0)
{
printf("list is empty!\n");
return;
}
else
{
for (int i = 1; i < seq->size; i++)
{
seq->array[i] = seq->array[i + 1];
}
seq->size--;
}
}
void Insert(SeqList *seq, size_t pos, DataType x)//
{
assert(seq);
if (seq->size >= MAX_SIZE)
{
printf("list is full!\n");
return;
}
if (pos<0 || pos>seq->size)
{
printf("pos illeage input!\n");
return;
}
else
{
seq->size--;
for (size_t i = seq->size; i > pos; i--)
{
seq->array[i] = seq->array[i - 1];
}
seq->array[pos] = x;
}
}
void Erase(SeqList *seq, size_t pos)
{
assert(seq);
if (pos<0 || pos>seq->size)
{
printf("illeage input\n");
return;
}
else
{
for (size_t i = pos; i < seq->size; i++)
{
seq->array[i] = seq->array[i + 1];
}
--seq->size;
}
}
int find(SeqList *seq, DataType x)
{
assert(seq);
for (rsize_t i = 0; i < seq->size; i++)
{
if (seq->array[i] == x);
return i;
}
return -1;
}
void Remove(SeqList *seq, DataType x)
{
assert(seq);
if (seq->size == 0)
{
printf("list is empty!");
return;
}
else
{
int i = find(seq, x);
if (x,-1)
{
Erase(seq, i);
}
}
}
void Removeall(SeqList *seq, DataType x)
{
assert(seq);
rsize_t i = 0, j = 0;
for (i = 0; i < seq->size; i++)
{
if (seq->array[i] != x)
{
seq->array[j] = seq->array[i];
j++;
}
}
seq->size -= i - j;
}
main.c
#include"text.h"
SeqList s;
void Text1()//尾部插入和删除
{
printf("尾部插入:\n");
Init(&s);
PushBack(&s, 8);
PushBack(&s, 2);
Print(&s);
PushBack(&s, 3);
PushBack(&s, 4);
Print(&s);
PushBack(&s, 7);
PushBack(&s, 9);
Print(&s);
printf("尾部删除:\n");
Print(&s);
PopBack(&s, 1);
Print(&s);
PopBack(&s, 1);
Print(&s);
PopBack(&s, 1);
Print(&s);
PopBack(&s, 1);
Print(&s);
PopBack(&s, 1);
Print(&s);
PopBack(&s, 1);
Print(&s);
}
void Text2()//头部插入和删除
{
printf("头部插入:\n");
PushFront(&s, 5);
Print(&s);
PushFront(&s, 7);
Print(&s);
PushFront(&s, 0);
Print(&s);
PushFront(&s, 1);
Print(&s);
PushFront(&s, 2);
Print(&s);
PushFront(&s, 6);
Print(&s);
PushFront(&s, 0);
Print(&s);
PushFront(&s, 5);
Print(&s);
PushFront(&s, 2);
Print(&s);
printf("头部删除:\n");
Print(&s);
PopFront(&s, 1);
Print(&s);
PopFront(&s, 1);
Print(&s);
PopFront(&s, 1);
Print(&s);
PopFront(&s, 1);
Print(&s);
PopFront(&s, 1);
Print(&s);
PopFront(&s, 1);
Print(&s);
PopFront(&s, 1);
Print(&s);
PopFront(&s, 1);
Print(&s);
PopFront(&s, 1);
Print(&s);
}
void Text3()//任意位置插入数字
{
printf("原数组:\n");
PushBack(&s, 8);
PushBack(&s, 2);
PushBack(&s, 3);
PushBack(&s, 4);
PushBack(&s, 7);
PushBack(&s, 9);
Print(&s);
printf("任意位置插入数字:\n");
Insert(&s, 0, 3);
Print(&s);
Insert(&s, 1, 5);
Print(&s);
Insert(&s, 2, 6);
Print(&s);
printf("\n");
}
void Text4()//移动数字
{
printf("原数组:\n");
PushBack(&s, 8);
PushBack(&s, 2);
PushBack(&s, 3);
PushBack(&s, 4);
PushBack(&s, 7);
PushBack(&s, 9);
Print(&s);
Remove(&s, 1);
Print(&s);
Removeall(&s, 7);
Print(&s);
}
int main()
{
Text1();
Text2();
Text3();
Text4();
system("pause");
return 0;
}
【C语言】实现静态顺序表
最新推荐文章于 2023-06-21 18:17:34 发布