代码实现顺序表的操作函数
// 值类型
typedef int DataType;
typedef struct SeqList {
DataType data; // 值
int size; // 数量
} SeqList;
// 初始化
void SeqListInit(SeqList *pSL);
// 尾部插入
void SeqListPushBack(SeqList *pSL, DataType data);
// 头部插入
void SeqListPushFront(SeqList *pSL, DataType data);
// 尾部删除
void SeqListPopBack(SeqList *pSL);
// 头部删除
void SeqListPopFront(SeqList *pSL);
// 按下标插入,pos 的范围是 [0, size]
void SeqListInsert(SeqList *pSL, int pos, DataType data);
// 按下标删除,pos 的范围是 [0, size)
void SeqListErase(SeqList *pSL, int pos);
// 按值删除,只删遇到的第一个
void SeqListRemove(SeqList *pSL, DataType data);
// 按值删除,删除所有的
void SeqListRemoveAll(SeqList *pSL, DataType data);
// 清空
void SeqListClear(SeqList *pSL);
// 按值查找,返回第一个找到的下标,如果没找到,返回 -1
int SeqListFind(SeqList *pSL, DataType data);
// 判断是否为空,1 表示空, 0 表示不空
int SeqListEmpty(SeqList *pSL);
// 返回数量
int SeqListSize(SeqList *pSL);
// 销毁
// 值类型
typedef int DataType;
typedef struct SeqList {
DataType data; // 值
int size; // 数量
} SeqList;
// 初始化
void SeqListInit(SeqList *pSL);
// 尾部插入
void SeqListPushBack(SeqList *pSL, DataType data);
// 头部插入
void SeqListPushFront(SeqList *pSL, DataType data);
// 尾部删除
void SeqListPopBack(SeqList *pSL);
// 头部删除
void SeqListPopFront(SeqList *pSL);
// 按下标插入,pos 的范围是 [0, size]
void SeqListInsert(SeqList *pSL, int pos, DataType data);
// 按下标删除,pos 的范围是 [0, size)
void SeqListErase(SeqList *pSL, int pos);
// 按值删除,只删遇到的第一个
void SeqListRemove(SeqList *pSL, DataType data);
// 按值删除,删除所有的
void SeqListRemoveAll(SeqList *pSL, DataType data);
// 清空
void SeqListClear(SeqList *pSL);
// 按值查找,返回第一个找到的下标,如果没找到,返回 -1
int SeqListFind(SeqList *pSL, DataType data);
// 判断是否为空,1 表示空, 0 表示不空
int SeqListEmpty(SeqList *pSL);
// 返回数量
int SeqListSize(SeqList *pSL);
// 销毁
void SeqListDestroy(SeqList *pSL);
#ifndef SCQLIST_H_ #define SCQLIST_H_ #endif #include<stdio.h> #include<stdlib.h> #include<string.h> #include<assert.h> typedef int DataType; #define MAX_SIZE (100) typedef struct SeqList { DataType array[MAX_SIZE]; // 存数据的空间 int size; // 1) 有效数据有多少个 2) 当前可用的数组下标 } SeqList; // 初始化 void SeqListInit(SeqList *pSL); // 销毁 void SeqListDestroy(SeqList *pSL); // 增删改查 // 增 // 尾插 void SeqListPushBack(SeqList *pSL, DataType data); // 头插 void SeqListPushFront(SeqList *pSL, DataType data); // 根据下标插入 void SeqListInsert(SeqList *pSL, int pos, DataType data); // 删 // 尾删 void SeqListPopBack(SeqList *pSL); // 头删 void SeqListPopFront(SeqList *pSL); // 根据下标删除 void SeqListErase(SeqList *pSL, int pos); // 根据数据删除,只删除遇到的第一个 void SeqListRemove(SeqList *pSL, DataType data); // 根据数据删除,删除所有遇到的 void SeqListRemoveAll(SeqList *pSL, DataType data); // 根据下标更新 void SeqListUpdate(SeqList *pSL, int pos, DataType data); // 查询 // 返回遇到的第一个下标,如果没有遇到,返回 -1 int SeqListFind(SeqList *pSL, DataType data); //从小到大排序 void SeqListSort(SeqList *pSL); //初始化 void SeqListInit(SeqList *pSL) { assert(pSL != NULL); pSL->size = 0; } // 销毁 void SeqListDestroy(SeqList *pSL) { assert(pSL != NULL); pSL->size = 0; } // 尾插 void SeqListPushBack(SeqList *pSL, DataType data) { assert(pSL != NULL); assert(pSL->size<MAX_SIZE); pSL->array[pSL->size] = data; pSL->size++; } // 头插 void SeqListPushFront(SeqList *pSL, DataType data) { assert(pSL != NULL); assert(pSL->size > 0); int i; for (i = pSL->size; i> 0; i--) { pSL->array[i] = pSL->array[i-1]; } pSL->array[0] = data; pSL->size++; } // 根据下标插入 void SeqListInsert(SeqList *pSL, int pos, DataType data) { assert(pSL != NULL); assert(pSL->size > pos); int i; for (i = pSL->size; i> pos; i--) { pSL->array[i] = pSL->array[i - 1]; } pSL->array[pos] = data; pSL->size++; } // 尾删 void SeqListPopBack(SeqList *pSL) { assert(pSL != NULL); assert(pSL->size > 0); pSL->size--; } // 头删 void SeqListPopFront(SeqList *pSL) { assert(pSL != NULL); int i = 0; for (i = 0; i < pSL->size-1; i++) { pSL->array[i] = pSL->array[i + 1]; } pSL->size--; } // 根据下标删除 void SeqListErase(SeqList *pSL, int pos) { assert(pSL!=NULL); assert(pSL->size>0); int i; for (i = pos; i < pSL->size - 1; i++) { pSL->array[i] = pSL->array[i + 1]; } pSL->size--; } // 根据数据删除,只删除遇到的第一个 void SeqListRemove(SeqList *pSL, DataType data) { int ret = SeqListFind(pSL,data); if (ret == -1) { SeqListErase(pSL, ret); } } // 根据数据删除,删除所有遇到的 void SeqListRemoveAll(SeqList *pSL, DataType data) { int i = 0; int ret=SeqListFind(pSL,data); for (i = 0; i < pSL->size; i++) { if (pSL->array[i] == pSL->array[ret]) { SeqListErase(pSL, i); } } } // 根据下标更新 void SeqListUpdate(SeqList *pSL, int pos, DataType data) { int i = pos; pSL->array[i] = data; } // 查询 // 返回遇到的第一个下标,如果没有遇到,返回 -1 int SeqListFind(SeqList *pSL, DataType data) { int i = 0; for (i = 0; i < pSL->size; i++) { if (pSL->array[i] == data) { return i; } } return -1; } void SeqListSort(SeqList *pSL) { int i = 0; int j = 0; for (i = 0; i < pSL->size-1; i++) { for (j = 0; j < pSL->size - 1 - i; j++) { if ((pSL->array[j]>pSL->array[j + 1])>0) { pSL->array[j] ^= pSL->array[j + 1]; pSL->array[j + 1] ^= pSL->array[j]; pSL->array[j] ^= pSL->array[j + 1]; } } } } void SeqListprint(SeqList *pSL) { int i; for (i = 0; i < pSL->size; i++) { printf("%d ", pSL->array[i]); } printf("\n"); } void TestSeplist() { SeqList s1; SeqListInit(&s1); SeqListDestroy(&s1); SeqListPushBack(&s1,1); SeqListPushBack(&s1,2); SeqListPushBack(&s1, 2); SeqListPushBack(&s1, 2); SeqListPushBack(&s1,3); SeqListPushFront(&s1,4); SeqListPushFront(&s1,5); SeqListPushFront(&s1,6); SeqListInsert(&s1, 0, 101); SeqListErase(&s1, 6); SeqListRemoveAll(&s1, 1); SeqListSort(&s1); SeqListprint(&s1); }
通过mian.c函数调用实现
#include"scqlist.h" int main() { TestSeplist(); system("pause"); return 0; }