单链表:单向无循环,最后置于空

//SeqList.h

#pragma once#include
#include
#include
#define MAX_SIZE 100typedef int DataType;typedef struct Seqlist{ DataType *_array; size_t _size; size_t _capacity;}Seqlist;void InitSeqlist(Seqlist *pSeq)//初始化{ assert(pSeq); pSeq->_capacity=MAX_SIZE; pSeq->_array=(DataType*)malloc(sizeof(DataType)*pSeq->_capacity); pSeq->_size=0;}void print(Seqlist *pSeq)//输出各数{ int i=0; assert(pSeq); for(;i
_size;++i) { printf("%d ",pSeq->_array[i]); } printf("\n");}void WideCapacity(Seqlist *pSeq)//增容{ if(pSeq->_size>=pSeq->_capacity) { DataType *tmp=0; pSeq->_capacity*=2; tmp=(DataType *)malloc(sizeof(DataType)*pSeq->_capacity); memcpy(tmp,pSeq->_array,sizeof(DataType)*pSeq->_size); free(pSeq->_array); pSeq->_array=tmp; }}void PushBack(Seqlist *pSeq,DataType x)//尾部增加{ assert(pSeq); if(pSeq->_size>=pSeq->_capacity) { WideCapacity(pSeq); } pSeq->_array[pSeq->_size++]=x;}void PopBack(Seqlist *pSeq)//尾部删除{ assert(pSeq); if(pSeq->_size==0) { printf("该顺序表已空,无法删除!\n"); return; } --pSeq->_size;}void PushFront(Seqlist *pSeq,DataType x)//首部增加{ int i=pSeq->_size; assert(pSeq); if(pSeq->_size>=pSeq->_capacity) { WideCapacity(pSeq); } for(;i>0;--i) { pSeq->_array[i]=pSeq->_array[i-1]; } pSeq->_array[0]=x; ++pSeq->_size;}void PopFront(Seqlist *pSeq)//首部删除{ int i=0; assert(pSeq); if(pSeq->_size==0) { printf("该顺序表已空,无法删除!\n"); return; } for(;i
_size;++i) { pSeq->_array[i]=pSeq->_array[i+1]; } --pSeq->_size;}void Insert(Seqlist *pSeq,size_t pos,DataType x)//插入{ int i=pSeq->_size-1; assert(pSeq); assert(pos<=pSeq->_size); if(pSeq->_size>=pSeq->_capacity) { WideCapacity(pSeq); } for(;i>=(int)pos;--i) { pSeq->_array[i+1]=pSeq->_array[i]; } pSeq->_array[pos]=x; ++pSeq->_size;}void Remove(Seqlist *pSeq,DataType x)//删除某个数(第一个){ int i=0; assert(pSeq); assert(pSeq->_size!=0); for(;i
_size;++i) { if(pSeq->_array[i]==x) { int start=i; for(;start
_size;++start) { pSeq->_array[start]=pSeq->_array[start+1]; } --pSeq->_size; return; } }}void RemoveAll(Seqlist *pSeq,DataType x)//删除某个数(全部){ / 第一种方法:  // //int i=0; //assert(pSeq); //assert(pSeq->_size!=0); //for(;i
_size;++i) //{ // if(pSeq->_array[i]==x) // { // int start=i; // for(;start
_size;++start) // { // pSeq->_array[start]=pSeq->_array[start+1]; // } // --pSeq->_size; // --i; // } //} /// 第二种方法: / int count=0; int firstIndex=0; int nextIndex=0; assert(pSeq); assert(pSeq->_size!=0); while(nextIndex
_size) { if(pSeq->_array[nextIndex]==x) { --pSeq->_array[nextIndex]; } else { pSeq->_array[firstIndex]=pSeq->_array[nextIndex]; ++firstIndex; count++; } ++nextIndex; } pSeq->_size=count;}int Find(Seqlist *pSeq,DataType x)//查找某个数{ int i=0; assert(pSeq); assert(pSeq->_size!=0); for(;i
_size;++i) { if(pSeq->_array[i]==x) { return 1; } }}void Modify(Seqlist *pSeq,size_t pos,DataType x)//修改数据{ int i=0; assert(pSeq); assert(pos<=pSeq->_size); assert(pSeq->_size!=0); for(;i<=(int)pos;++i) { if(i==pos) { pSeq->_array[i]=x; } }}void Erase(Seqlist *pSeq,size_t pos)//抹除某个下标的值{ int i=0; assert(pSeq); assert(pos<=pSeq->_size); assert(pSeq->_size!=0); for(;i
_size;++i) { if(i==pos) { int start=i; for(;start
_size;++start) { pSeq->_array[start]=pSeq->_array[start+1]; } --pSeq->_size; return; } }}

//Test.cpp 测试用例

#define _CRT_SECURE_NO_WARNINGS#include
#include "Seqlist.h"void Test1()//尾部操作{ Seqlist s; InitSeqlist(&s); PushBack(&s,1); PushBack(&s,2); PushBack(&s,3); PushBack(&s,4); print(&s); PopBack(&s); print(&s);}void Test2()//首部操作{ Seqlist s; InitSeqlist(&s); PushFront(&s,4); PushFront(&s,3); PushFront(&s,2); PushFront(&s,1); PushFront(&s,0); print(&s); PopFront(&s); print(&s);}void Test3()//任意位置操作{ Seqlist s; InitSeqlist(&s); PushFront(&s,4); PushFront(&s,2); PushFront(&s,2); PushFront(&s,3); PushFront(&s,2); PushFront(&s,1); print(&s); Insert(&s,1,0); print(&s); Remove(&s,2); print(&s); RemoveAll(&s,2); print(&s);}void Test4(int k)//查找{ int ret=0; Seqlist s; InitSeqlist(&s); PushFront(&s,4); PushFront(&s,3); PushFront(&s,2); PushFront(&s,1); PushFront(&s,0); print(&s); ret=Find(&s,k); if(ret==1) { printf("该顺序表中存在该数!\n"); } else { printf("该顺序表中不存在该数!\n"); }}void Test5()//修改、抹除{ Seqlist s; InitSeqlist(&s); PushFront(&s,3); PushFront(&s,2); PushFront(&s,1); PushFront(&s,0); print(&s); Modify(&s,3,1); print(&s); Erase(&s,1); print(&s);}int main(){ int k=0; printf("尾部操作 \n"); Test1(); printf("首部操作 \n"); Test2(); printf("任意位置操作 \n"); Test3(); printf("查找某数 \n"); printf("请输入数字:"); scanf("%d",&k); Test4(k); printf("修改某数、抹除下标的值 \n"); Test5(); system("pause"); return 0;}