标签:
最近在学习数据结构的单链表部分,于是写了一个静态单链表做练习。实现了对其初始化、添加、更改、删除等功能的实现。
"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