动态顺序表的初始化及增删查改
#pragma once #include<iostream> #include<string.h> #include<assert.h> #include<stdlib.h> typedef int DataType; typedef struct SeqList { DataType* _array; size_t _size; size_t _capacity; }SeqList; void InitSeqList(SeqList *pSeq) { assert(pSeq); pSeq->_capacity=10; pSeq->_array=(DataType*)malloc(sizeof(DataType)*pSeq->_capacity); pSeq->_size=0; } void PrintSeqList(SeqList *pSeq) { int i=0; assert(pSeq); for(;(size_t)i<pSeq->_size;i++) { printf("%d ",pSeq->_array[i]); } printf("\n"); } void PushBack(SeqList *pSeq, DataType x) { DataType* tmp; assert(pSeq); if(pSeq->_size>=pSeq->_capacity) { pSeq->_capacity *=2; tmp=(DataType*)malloc(sizeof(DataType)*pSeq->_capacity); memcpy(tmp,pSeq->_array,sizeof(DataType)*pSeq->_size); free(pSeq->_array); pSeq->_array=tmp; } else { pSeq->_array[pSeq->_size++]=x; } } void Popback(SeqList* pSeq) { assert(pSeq); if(pSeq->_size==0) { printf("SeqList is empty!\n"); return; } else { //pSeq->_array[--pSeq->_size]=0;//和[--pSeq->_size]有什么区别 pSeq->_size--; } } void PushFront(SeqList *pSeq,DataType x) { DataType* tmp; int i; assert(pSeq); if(pSeq->_size>=pSeq->_capacity) { pSeq->_capacity *=2; tmp=(DataType*)malloc(sizeof(DataType)*pSeq->_capacity); memcpy(tmp,pSeq->_array,sizeof(DataType)*pSeq->_size); free(pSeq->_array); pSeq->_array=tmp; } else { for(i=pSeq->_size;i>0;i--) { pSeq->_array[i]=pSeq->_array[i-1]; } pSeq->_array[i]=x; pSeq->_size++; } } void PopFront(SeqList*pSeq) { int i; assert(pSeq); if(pSeq->_size==0) { printf("SeqList is null!"); return; } else { for(i=0;i<pSeq->_size;i++) { pSeq->_array[i]=pSeq->_array[i+1]; } pSeq->_size--; } } void Insert(SeqList *pSeq,size_t pos,DataType x) { size_t i; DataType* tmp; assert(pSeq); if(pSeq->_size>=pSeq->_capacity) { pSeq->_capacity *=2; tmp=(DataType*)malloc(sizeof(DataType)*pSeq->_capacity); memcpy(tmp,pSeq->_array,sizeof(DataType)*pSeq->_size); free(pSeq->_array); pSeq->_array=tmp; } else { for(i=pSeq->_size;i>=pos;i--) { pSeq->_array[i+1]=pSeq->_array[i]; } pSeq->_array[pos]=x; pSeq->_size++; } } void Erase(SeqList *pSeq,size_t pos)//删掉某一位置的元素 { size_t i; assert(pSeq); if(pos>pSeq->_size) { printf("Seqlist is not exist!"); } else { for(i=pos;i<pSeq->_size;i++) { pSeq->_array[i-1]=pSeq->_array[i];//换成这个为什么不行 pSeq->_array[i]=pSeq->_array[i+1]; } pSeq->_size--; } } int Find(SeqList *pSeq,DataType x) { int i; assert(pSeq); for(i=0;i<=pSeq->_size;i++) { if(x==pSeq->_array[i]) { return i; } else { return -1; } } } void Remove(SeqList *pSeq,DataType x) { int i,ret; assert(pSeq); ret=Find(pSeq,x); if(ret==-1) { printf("SeqList is not exist!\n"); } else { for(i=ret;i<pSeq->_size;i++) { pSeq->_array[i]=pSeq->_array[i+1]; } pSeq->_size--; } } void RemoveAll(SeqList *pSeq,DataType x) { size_t FirstIndex=0; size_t SecondIndex=0; size_t count=0; assert(pSeq); while(FirstIndex<pSeq->_size) { if(pSeq->_array[FirstIndex]==x) { count++; } else { pSeq->_array[SecondIndex]=pSeq->_array[FirstIndex]; SecondIndex++; } FirstIndex++; } pSeq->_size=count; } void Modify(SeqList *pSeq,size_t pos,DataType x) { assert(pSeq); pSeq->_array[pos]=x; }
本文出自 “sunshine225” 博客,请务必保留此出处http://10707460.blog.51cto.com/10697460/1754046
原文地址:http://10707460.blog.51cto.com/10697460/1754046