数据结构之实现顺序表的简单操作函数

匿名 (未验证) 提交于 2019-12-03 00:26:01

简单实现静态顺序表的基本操作:初始化,销毁,增删改查等操作。

SeqList.h

#ifndef _SEQLIST_H_ #define _SEQLIST_H_  #include <stdio.h> #include <stdlib.h> #include <string.h> #include <assert.h>  #define MAX_SIZE 100 typedef int DataType; 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);//根据下标更新数据 //查询 int SeqListFind(SeqList *pSL,DataType data);//返回遇到的第一个下标,若没有遇到,就返回-1 

SeqList.c

#include "Seqlist.h" void SeqListPrint(SeqList *pSL) {     int i ;     for (i = 0; i < pSL->size; i++)     {         printf("%d ", pSL->array[i]);     }     printf("\n"); }  void SeqListInit(SeqList *pSL)//初始化 {     assert(pSL != NULL);     memset(pSL->array, 0, MAX_SIZE*sizeof(DataType));     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 < MAX_SIZE);     //将已知数据往后移     //1.以条件写循环 #if 0     int pos;//以搬移的数做循环指示     for (pos = pSL->size - 1; pos >= 0; pos--)     {         pSL->array[pos + 1] = pSL->array[pos];     } #endif #if 0     int space;//以搬到的位置做循环指示     for(space = pSL->size; space > 0; space--)     {         pSL->array[space] = pSL->array[space - 1];     } #endif #if 2     //2.以循环次数做循环指示     int i;     for (i = 0; i < pSL->size; i++)     {         pSL->array[pSL->size - i] = pSL->array[pSL->size - i - 1];     } #endif     pSL->array[0] = data;     pSL->size++; } void SeqListInsert(SeqList *pSL, int pos, DataType data)//根据下标插入 {     assert(pSL != NULL);     assert(pSL->size < MAX_SIZE);     int space;     for (space = pSL->size; space>pos; space--)     {         pSL->array[space] = pSL->array[space - 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 pos;     for (pos = 1; pos < pSL->size; pos++)     {         pSL->array[pos - 1] = pSL->array[pos];     }     pSL->size--; } void SeqListErase(SeqList *pSL, int pos)//根据下标删除 {     assert(pSL != NULL);     assert(pSL->size>0);     int i;     for (i = pos; pos < pSL->size - 1; pos++)     {         pSL->array[pos] = pSL->array[pos + 1];     }     pSL->size--; }  void SeqListRemove(SeqList *pSL, DataType data)//根据数据删除,删除遇到的第一个 {     int pos = SeqListFind(pSL, data);     if (pos != -1)     {         SeqListErase(pSL, pos);     } } void SeqListRemoveAll(SeqList *pSL, DataType data)//根据数据删除,删除所有指定数据 { #if 0     for (i = 0, j = 0; i < pSL->size; i++)     {         if (pSL->array[i] != data)         {             pSL->array[j] = pSL->array[i];             j++;         }     }     pSL->size = j; #endif #if 1     int i = 0;     int count = 0;     for (i = 0; i < pSL->size; i++)     {         if (pSL->array[i] == data)         {             count++;         }         else         {             pSL->array[i - count] = pSL->array[i];         }         pSL->size -= count;     }  #endif } void SeqListUpdate(SeqList *pSL, int pos, DataType data)//根据下标更新数据 {     assert(pSL != NULL);     assert(pos >= 0 && pos < pSL->size);     pSL->array[pos] = data; } int SeqListFind(SeqList *pSL, DataType data)//返回遇到的第一个下标,若没有遇到,就返回-1 {     assert(pSL != NULL);     int i;     for (i = 0; i < pSL->size; i++)     {         if (pSL->array[i] == data)         {             return i;         }     }     return -1; } 

测试代码:

int main() {     SeqList S;     SeqListInit(&S);     SeqListPrint(&S);     //尾插     SeqListPushBack(&S,1);     SeqListPushBack(&S,3);     SeqListPushBack(&S,4);     SeqListPushBack(&S,3);     SeqListPushBack(&S,5);     SeqListPushBack(&S,7);     SeqListPushBack(&S, 8);     SeqListPushBack(&S, 0);     SeqListPushBack(&S, 9);     SeqListPushBack(&S, 3);     SeqListPrint(&S);     //头插     SeqListPushFront(&S, 4);     SeqListPushFront(&S, 7);     SeqListPushFront(&S, 0);     SeqListPrint(&S);     //根据下标插入     SeqListInsert(&S, 2,6);     SeqListInsert(&S, 4,5);     SeqListPrint(&S);     //尾删     SeqListPopBack(&S);     SeqListPrint(&S);     //头删     SeqListPopFront(&S);     SeqListPopFront(&S);     SeqListPrint(&S);     //根据下标删除     SeqListErase(&S, 4);     SeqListErase(&S, 7);     SeqListPrint(&S);     //根据数据删除,删除遇到的第一个     SeqListRemove(&S, 5);     SeqListPrint(&S);     //根据数据删除,删除所有指定数据     SeqListRemoveAll(&S, 5);     SeqListPrint(&S);     //根据下标更新数据     SeqListUpdate(&S,1,8);     SeqListUpdate(&S,3,0);     SeqListPrint(&S);     //查询     printf("%d\n", SeqListFind(&S, 3));     //销毁顺序表     SeqlistDestroy(&S);     system("pause");     return 0; }
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!