头文件
#include"stdio.h"
#include "assert.h"
#include "malloc.h"
#include"string.h"
#include "windows.h"
#ifndef _SEQLIST_H__
#define _SEQLIST_H__
#define max_size 10
typedef int DataType;
typedef struct seqlist
{
DataType arr[max_size];
int size;
}seqlist, *pseqlist;
typedef enum status{ true, false }status;
void InitSeqlist(pseqlist pseq);
void PrintSeqlist(pseqlist pseq);
int Find(pseqlist pseq, DataType data);
void PushBack(pseqlist pseq, DataType data);
void PopBack(pseqlist pseq);
void PushFront(pseqlist pseq, DataType data);
void PopFront(pseqlist pseq);
void Insert(pseqlist pseq, int pos, DataType data);
void Erase(pseqlist pseq, int pos);
void Remove(pseqlist pseq, DataType data);
void RemoveAll1(pseqlist pseq, DataType data);
void RemoveAll2(pseqlist pseq, DataType data);
int Empty(pseqlist pseq);
void Bubblesort(pseqlist pseq);
void SelectSort(pseqlist pseq);
#endif _SEQLIST_H__
函数实现
#include"seqlist.h"
void InitSeqlist(pseqlist pseq)
{
assert(pseq);
pseq->size = 0;
}
void PrintSeqlist(pseqlist pseq)
{
assert(pseq);
for (int i = 0; i < pseq->size; i++)
{
printf("%d ", pseq->arr[i]);
}
}
int Find(pseqlist pseq, DataType data)
{
assert(pseq);
for (int i = 0; i < pseq->size; i++)
{
if (pseq->arr[i] == data)
{
return i;
}
}
return 0;
}
void PushBack(pseqlist pseq, DataType data)
{
assert(pseq);
if (pseq->size >= max_size)
{
printf("顺序表已满!\n");
}
pseq->arr[pseq->size] = data;
pseq->size++;
}
void PopBack(pseqlist pseq)
{
assert(pseq);
if (Empty(pseq))
{
printf("顺序表已空!\n");
}
pseq->size--;
}
void PushFront(pseqlist pseq, DataType data)
{
assert(pseq);
if (pseq->size >= max_size)
{
printf("顺序表已满!\n");
}
for (int i = pseq->size - 1; i > 0; i--)
{
pseq->arr[i+1] = pseq->arr[i];
}
pseq->arr[0] = data;
pseq->size++;
}
void PopFront(pseqlist pseq)
{
assert(pseq);
if (Empty(pseq))
{
printf("顺序表已空!\n");
}
for (int i = pseq->size - 1; i > 0; i--)
{
pseq->arr[i - 1] = pseq->arr[i];
}
pseq->size--;
}
void Insert(pseqlist pseq, int pos, DataType data)
{
assert(pseq);
if (pseq->size >= max_size)
{
printf("顺序表已满!\n");
}
if (pos<0 || pos>max_size)
{
printf("位置非法!\n");
return;
}
for (int i = pseq->size - 1; i > pos; i--)
{
pseq->arr[i + 1] = pseq->arr[i];
}
pseq->arr[pos-1] = data;
pseq->size++;
}
void Erase(pseqlist pseq, int pos)
{
assert(pseq);
if (Empty(pseq))
{
printf("顺序表已空\n");
return;
}
if (pos<0 || pos>max_size)
{
printf("位置非法");
return;
}
for (int i = pseq->size - 1; i > pos; i--)
{
pseq->arr[i] = pseq->arr[i - 1];
}
pseq->size--;
}
void Remove(pseqlist pseq, DataType data)
{
assert(pseq);
if (Empty(pseq))
{
printf("顺序表已空\n");
return;
}
int pos=Find(pseq, data);
for (int i = pseq->size - 1; i > pos; i++)
{
pseq->arr[i - 1] = pseq->arr[i];
}
pseq->size--;
}
void RemoveAll(pseqlist pseq, DataType data)
{
assert(pseq);
if (Empty(pseq))
{
printf("顺序表已空\n");
return;
}
int count = 0;
for (int i = 0; i < pseq->size; i++)
{
if (pseq->arr[i] == data)
{
count++;
pseq->arr[i] = pseq->arr[i + 1];
}
}
pseq->size -= count;
}
int Empty(pseqlist pseq)
{
assert(pseq);
if (pseq->size == 0)
{
return 1;
}
return 0;
}
void Bubblesort(pseqlist pseq)
{
int i = 0;
int j = 0;
int flag = 0;
for (i = 0; i < pseq->size; i++)
{
flag = 0;
for (j = i + 1; j < pseq->size - i; j++)
{
if (pseq->arr[i] > pseq->arr[j])
{
int flag = 1;
int temp = pseq->arr[i];
pseq->arr[i] = pseq->arr[j];
pseq->arr[j] = temp;
}
}
}
}
void SelectSort(pseqlist pseq)
{
assert(pseq);
int min = 0;
int max = pseq->size - 1;
for (int i = 0; i < pseq->size; i++)
{
for (int j = i; j<pseq->size - i; j++)
{
if (min > pseq->arr[j])
{
min = j;
}
if (max < pseq->arr[j])
{
max = j;
}
if (min != 0)
{
int temp = pseq->arr[0];
pseq->arr[0] = pseq->arr[min];
pseq->arr[min] = temp;
}
if (max != pseq->size - 1)
{
int temp = pseq->arr[pseq->size-1];
pseq->arr[pseq->size-1] = pseq->arr[max];
pseq->arr[max] = temp;
}
}
}