最近在学习数据结构的单链表部分,于是写了一个静态单链表做练习。实现了对其初始化、添加、更改、删除等功能的实现。
"Seqlist.h"
#pragma once
#define __SEQ_LIST__
#ifdef __SEQ_LIST__
#include <stdio.h>
#include <assert.h>
#include <string.h>
#define MAXSIZE 100
typedef int DataType;
typedef struct SeqList
{
DataType array[MAXSIZE];
size_t size;
}SeqList;
typedef enum Tag
{
TRUE, // 真
FALSE, // 假
}Tag;
typedef struct FindRet
{
Tag isFind; // 是否找到的标示
size_t index; // 找到数据的下标
}FindRet;
void InitSeqList(SeqList* pSeq);
void PrintSeqList(SeqList* pSeq);
void PushBack(SeqList* pSeq, DataType x);//从尾部添加数据
void PopBack(SeqList* pSeq);//从尾部删除数据
void PushFront(SeqList* pSeq, DataType x);//从头部添加数据
void PopFront(SeqList* pSeq);//从头部删除数据
void Insert(SeqList* pSeq, size_t index, DataType x);//插入数据
void Modified (SeqList* pSeq, size_t index, DataType x );//修改数据
void Remove(SeqList* pSeq, size_t index);//删除数据
// 返回-1,表示查找失败。
// 返回>=0,表示查找成功,返回值表示查找到数据的下标。
FindRet Find(SeqList* pSeq, DataType x, size_t index);
#endif // __SEQ_LIST__"Seqlist.c"
#include "Seqlist.h"
void InitSeqList(SeqList *pSeq)
{
assert(pSeq);
memset(pSeq->array, 0, MAXSIZE*sizeof(DataType));
pSeq->size = 0;
}
void PrintSeqList(SeqList *pSeq)
{
size_t i = 0;
assert(pSeq);
for (; i < pSeq->size; ++i)
{
printf("%d ", pSeq->array[i]);
}
printf("\n");
}
void PushBack(SeqList* pSeq, DataType x)
{
assert(pSeq);
if (pSeq->size>MAXSIZE - 1)
{
printf("array is full");
return;
}
pSeq->array[pSeq->size++] = x;
}
void PopBack(SeqList* pSeq)
{
assert(pSeq);
if (pSeq->size < 1)
{
printf("array is empty");
return;
}
--pSeq->size;
}
void PushFront(SeqList* pSeq, DataType x)
{
int i = pSeq->size - 1;
assert(pSeq);
if (pSeq->size > MAXSIZE - 1)
{
printf("array is full");
return;
}
for (; i >= 0; i--)
{
pSeq->array[i + 1] = pSeq->array[i];
}
pSeq->array[0] = x;
++pSeq->size;
}
void PopFront(SeqList* pSeq)
{
int i = 0;
assert(pSeq);
if (pSeq->size == 0)
{
printf("array is empty");
}
for (; i < (int)(pSeq->size); ++i)
{
pSeq->array[i - 1] = pSeq->array[i];
}
pSeq->size--;
}
void Insert(SeqList* pSeq, size_t index, DataType x)
{
size_t end = pSeq->size;
assert(pSeq);
assert(index<=(pSeq->size));
if (pSeq->size>MAXSIZE-1)
{
printf("array is full");
return;
}
for (; end > index; --end)
{
pSeq->array[end] = pSeq->array[end - 1];
}
pSeq->array[index] = x;
pSeq->size++;
}
void Modified(SeqList* pSeq, size_t index, DataType x)
{
assert(pSeq);
assert(index < pSeq->size);
pSeq->array[index] = x;
}
void Remove(SeqList* pSeq, size_t index)
{
assert(pSeq);
assert(index < pSeq->size);
for (; index < pSeq->size; ++index)
{
pSeq->array[index] = pSeq->array[index + 1];
}
pSeq->size--;
}
FindRet Find(SeqList* pSeq, DataType x, size_t index)
{
FindRet ret;
assert(pSeq);
for (; index < pSeq->size; ++index)
{
if (x == pSeq->array[index])
{
ret.isFind = TRUE;
ret.index = index;
printf("TRUE\n");
return ret;
}
}
ret.isFind = FALSE;
return ret;
}
#include "Seqlist.h"
void Test1()
{
SeqList s;
InitSeqList(&s);
PushBack(&s, 1);
PushBack(&s, 2);
PushBack(&s, 3);
PushBack(&s, 4);
PrintSeqList(&s);
PopBack(&s);
PopBack(&s);
PrintSeqList(&s);
}
void Test2()
{
SeqList s;
InitSeqList(&s);
PushFront(&s, 1);
PushFront(&s, 2);
PushFront(&s, 3);
PushFront(&s, 4);
PrintSeqList(&s);
PopFront(&s);
PrintSeqList(&s);
}
void Test3()
{
SeqList s;
InitSeqList(&s);
PushBack(&s, 1);
PushBack(&s, 2);
PushBack(&s, 3);
PushBack(&s, 4);
Insert(&s, 1, 10);
PrintSeqList(&s);
Modified(&s, 1, 99);
PrintSeqList(&s);
Remove(&s, 3);
PrintSeqList(&s);
}
void Test4()
{
SeqList s;
InitSeqList(&s);
Insert(&s, 0, 0);
Insert(&s, 1, 1);
Insert(&s, 2, 2);
Insert(&s, 3, 3);
Find(&s, 2, 2);
PrintSeqList(&s);
}
int main()
{
Test1();
printf("\n");
Test2();
printf("\n");
Test3();
printf("\n");
Test4();
getchar();
return 0;
}
原文:http://blog.csdn.net/lolita0917/article/details/46626317