静态顺序表

SeqList.h

#include<stdio.h>
 
#ifndef __SEQ_LIST__
 
#define __SEQ_LIST__
#define MAX_SIZE 5
 
typedef int DataType;
 
typedef struct SeqList
{
DataType seqList[MAX_SIZE];
size_t size;
}SeqList;
 
void InitSeqList(SeqList* seq);
void PrintSeqList(SeqList* seq);
void PushBack(SeqList* seq, DataType x);
void PopBack(SeqList* seq);
void PushFront(SeqList* seq, DataType x);
void PopFront(SeqList* seq);
void Insert(SeqList* seq, size_t pos, DataType x);
 
//// 返回-1表示未找到数据
int Find(SeqList* seq, DataType x);
void Erase(SeqList* seq, size_t pos);
void Remove(SeqList* seq, DataType x);
void RemoveAll(SeqList* seq, DataType x);
void Modify(SeqList* seq, size_t pos, DataType x);
 
#endif


SeqList.c

#include<stdio.h>
#include<assert.h>
#include<string.h>
#include"SeqList.h"
 
void InitSeqList(SeqList* seq)//初始化  默认为零
{
assert(seq);
memset(seq, 0, MAX_SIZE*sizeof(DataType));
seq->size = 0;
}
 
void PrintSeqList(SeqList* seq)//遍历顺序表
{
assert(seq);
size_t index = 0;
if (seq->size == 0)
{
printf("顺序表为空!\n");
return;
}
for (; index < seq->size; ++index)
{
printf("%d\n", seq->seqList[index]);
}
}
void PushBack(SeqList* seq, DataType x)//尾插
{
assert(seq);
if (seq->size > MAX_SIZE)
return;
if (seq->size == MAX_SIZE)
{
printf("顺序表已满!\n");
return;
}
 
seq->seqList[(seq->size)++] = x;
}
void PopBack(SeqList* seq)//尾删
{
assert(seq);
if (seq->size == 0)
{
printf("顺序表已空!\n");
return;
}
--(seq->size);
}
void PushFront(SeqList* seq, DataType x)//头插
{
int end = seq->size;
assert(seq);
if (seq->size > MAX_SIZE)
seq->size=0;
 
if (seq->size == MAX_SIZE)
{
printf("顺序表已满!\n");
return;
}
for (; end > 0; --end)
{
seq->seqList[end] = seq->seqList[end - 1];
}
seq->seqList[0] = x;
seq->size++;
}
 
void PopFront(SeqList* seq)//头删
{
size_t start = 0;
assert(seq);
if (seq->size == 0)
{
printf("顺序表已空!\n");
return;
}
for (; start <seq->size; ++start)
{
seq->seqList[start] = seq->seqList[start + 1];
}
--seq->size;
}
 
void Insert(SeqList* seq, size_t pos, DataType x)
{
int end = seq->size;
assert(seq);
if (seq->size > MAX_SIZE)
return;
if (pos > seq->size)
{
printf("不合法的插入位置!\n");
return;
}
if (seq->size == MAX_SIZE)
{
printf("顺序表已满!\n");
return;
}
for (; end >= pos - 1; --end)
{
seq->seqList[end] = seq->seqList[end - 1];
}
seq->seqList[pos - 1] = x;
seq->size++;
}
int Find(SeqList* seq, DataType x)
{
size_t pos = 0;
assert(seq);
for (; pos < seq->size; ++pos)
{
if (seq->seqList[pos] == x)
return pos;
}
return -1;
}
 
void Erase(SeqList* seq, size_t pos)//按位置删除
{
size_t start = 0;
assert(seq);
if (seq->size == 0)
{
printf("顺序表已空!\n");
return;
}
start = pos - 1;
for (; start <seq->size; ++start)
{
seq->seqList[start] = seq->seqList[start + 1];
}
--seq->size;
}
 
void Remove(SeqList* seq, DataType x)
{
int tag = 0;
assert(seq);
if (seq->size == 0)
{
printf("顺序表为空!\n");
return;
}
size_t index = 0;
for (; index < seq->size; ++index)
{
if (seq->seqList[index] == x)
{
for (; index < seq->size; ++index)
{
seq->seqList[index] = seq->seqList[index + 1];
}
--seq->size;
tag = 1;
}
}
if (tag == 0)
printf("未找到该元素!\n");
}
 
void RemoveAll(SeqList* seq, DataType x)
{
size_t pos = 0, start = 0;
assert(seq);
if (seq->size == 0)
{
printf("顺序表为空!\n");
return;
}
for (; pos < seq->size; ++pos)
{
if (seq->seqList[pos] == x)
{
for (start = pos; start < seq->size; ++start)
{
seq->seqList[start] = seq->seqList[start + 1];
}
--seq->size;
--pos;
}
}
}
 
void Modify(SeqList* seq, size_t pos, DataType x)
{
assert(seq);
if (pos > seq->size)
{
printf("不合法的插入位置!\n");
return;
}
seq->seqList[pos - 1] = x;
}


Test.c

 

#include"SeqList.h"
#include<stdlib.h>
//void test1(SeqList * seq)
//{
//  PushFront(seq, 0);
//  PushFront(seq, 1);
//  PushFront(seq, 2);
//  PushFront(seq, 3);
//  PushFront(seq, 3);
//  PrintSeqList(seq);//从前向后插,依次往后推变成3 3 2 1 0
//  PopFront(seq);
//  PopFront(seq);
//  PopFront(seq);
//  PrintSeqList(seq);//从前向后抛出,抛出前三个变为1 0
//  PopFront(seq);
//  PopFront(seq);
//  PrintSeqList(seq);//再抛出两个,结果顺序表为空
//}
 
void test2(SeqList * seq)
{
PushFront(seq, 0);
PushFront(seq, 3);
PushFront(seq, 3);
PushFront(seq, 3);//从前往后一依次插入3 3 3 0
Insert(seq, 2, 4);//给第二个位置插入元素4
PrintSeqList(seq); //3 4 3 3 0
printf("%d\n", Find(seq, 5));//找元素5,结果为-1
Erase(seq, 2);//清除第二个位置上的元素,结果为3 3 3 0
 
RemoveAll(seq, 3);//清除元素3
PrintSeqList(seq);
}
 
int main()
{
SeqList seq;
//test1(&seq);
test2(&seq);
system("pause");
return 0;
}



你可能感兴趣的:(静态顺序表)