使用C语言实现顺序表
顺序表的主要功能有:
1、初始化顺序表
2、顺序表的头插
3、顺序表的尾插
4、顺序表的头删
5、顺序表的尾删
6、顺序表的任意点插入
7、顺序表的查找删除
8、顺序表的排序
9、清空顺序表
10、打印顺序表
具体代码实现如下:
SeqList.h
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>
typedef int DataType;
#define N 10
typedef struct SeqList{
DataType a[N];
rsize_t size;
}SeqList,*pSeqList;
//增删查改
void SeqListInit(pSeqList s); //顺序表的初始化
void SeqListPushBack(pSeqList s, DataType x);//顺序表的尾插
void SeqListPushFront(pSeqList s, DataType x); //顺序表的头插
void SeqListPopBack(pSeqList s);//顺序表的尾删
void SeqListPopFront(pSeqList s);//顺序表的头删
void PrintSeqList(SeqList s);//打印顺序表
void InsertSeqList(pSeqList s, size_t x,DataType y);//顺序表的插入
void DeleteSeqList(pSeqList s, DataType x);//顺序表删除
void SeqListSort(pSeqList s);//顺序表排序
void EmptySeqList(pSeqList s);//清空顺序表
SeqList.c
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include "SeqList.h"
void SeqListInit(pSeqList s) //顺序表的初始化
{
memset(s->a, 0, sizeof(DataType)*N);
s->size = 0;
}
void PrintSeqList(SeqList s)//打印顺序表
{
size_t i = 0;
if (s.size == 0)
{
printf("顺序表为空\n");
return;
}
for (; i < s.size-1; ++i){
printf("%d-->", s.a[i]);
}
printf("%d\n", s.a[s.size - 1]);
return;
}
int FindSeqList(pSeqList s, DataType x)//顺序表的查找
{
size_t i = 0;
if (s->size == 0)
{
printf("顺序表为空\n");
}
else{
for (i = 0; i < s->size; ++i)
{
if (s->a[i] == x)
return i;
}
}
return -1;
}
void SeqListBubbleSort(pSeqList s){//冒泡排序
assert(s);
size_t i = 0;
size_t j = 0;
int tmp = 0;
for (i = 0; i < s->size - 1; i++)
{
for (j = 0; j < s->size - 1 - i; ++j)
{
if (s->a[j]>s->a[j + 1])
{
tmp = s->a[j];
s->a[j] = s->a[j + 1];
s->a[j + 1] = tmp;
}
}
}
}
void SeqListPushBack(pSeqList s, DataType x)//顺序表的尾插
{
assert(s);
if (s->size >= N)
{
printf("空间不足\n");
return;
}
else{
s->a[s->size] = x;
s->size++;
}
return;
}
void SeqListPushFront(pSeqList s,DataType x) //顺序表的头插
{
assert(s);
int i = 0;
if (s->size >= N)
{
printf("空间不足\n");
return;
}
else{
for (i = s->size; i >=0; --i)
{
s->a[i + 1] = s->a[i];
}
s->a[0] = x;
s->size++;
}
return;
}
void SeqListPopBack(pSeqList s)//顺序表的尾删
{
assert(s);
if (s->size == 0)
{
printf("顺序表内没有元素\n");
}
else{
s->size--;
}
return;
}
void SeqListPopFront(pSeqList s)//顺序表的头删
{
assert(s);
size_t i = 0;
if (s->size == 0)
{
printf("顺序表内没有元素\n");
}
else{
for (i = 0; i < s->size-1; ++i)
{
s->a[i] = s->a[i + 1];
}
s->size--;
}
return;
}
void InsertSeqList(pSeqList s, size_t x, DataType y)//顺序表任意位置的插入
{
assert(s);
size_t i = 0;
if (s->size >= N)
{
printf("空间不足\n");
return;
}
if (x < 0 || x >= N)
{
printf("你插入的位置不存在\n");
}
else if (x < s->size){
for (i = s->size; i >= x; --i)
{
s->a[i + 1] = s->a[i];
}
s->a[x] = y;
s->size++;
}
else
{
s->a[s->size] = y;
s->size++;
}
return;
}
void DeleteSeqList(pSeqList s, DataType x)//顺序表删除
{
assert(s);
int tmp = 0;
size_t i = 0;
if (s->size == 0)
{
printf("顺序表为空\n");
return;
}
tmp = FindSeqList(s, x);
if (tmp != -1){
for (i = tmp; i < s->size - 1; ++i)
{
s->a[i] = s->a[i + 1];
}
s->size--;
}
else
printf("你要删除的元素不存在\n");
return;
}
void SeqListSort(pSeqList s)//顺序表排序
{
assert(s);
size_t i = 0;
int tmp = 0;
if (s->size == 0)
{
printf("顺序表为空\n");
return;
}
SeqListBubbleSort(s);
return;
}
void EmptySeqList(pSeqList s)//清空顺序表
{
assert(s);
s->size = 0;
return;
}
void test1()
{
SeqList s;
SeqListInit(&s);
SeqListPushBack(&s, 1);
SeqListPushBack(&s, 2);
SeqListPushBack(&s, 3);
SeqListPushBack(&s, 4);
SeqListPushBack(&s, 3);
SeqListPushBack(&s, 6);
SeqListPushBack(&s, 7);
SeqListPushBack(&s, 9);
PrintSeqList(s);
SeqListPushFront(&s, 5);
PrintSeqList(s);
SeqListPopBack(&s);
SeqListSort(&s);
PrintSeqList(s);
SeqListPopFront(&s);
PrintSeqList(s);
InsertSeqList(&s, 3, 4);
PrintSeqList(s);
DeleteSeqList(&s, 7);
PrintSeqList(s);
DeleteSeqList(&s, 4);
PrintSeqList(s);
SeqListSort(&s);
PrintSeqList(s);
EmptySeqList(&s);
PrintSeqList(s);
}
int main()
{
test1();
return 0;
}