C 语言顺序表
#pragma once
#include<string.h>
#include<assert.h>
#include<string.h>
typedef int DateType;
#define N 100
typedef struct SeqList
{
DateType array[N];
size_t size;
}SeqList;
void InitSeqList(SeqList* s);//初始化
void PushBack(SeqList* s, DateType x);//尾部插入
void PopBack(SeqList* s);//尾部删除
void PrintSeqList(SeqList*s);//打印
void PushFront(SeqList*s,DateType x);//在头上插入
void PoPFront(SeqList*s,DateType x);//在头上删除
void Insert(SeqList*s,size_t pos,DateType x);//中间插入
void Erase(SeqList* s,size_t pos);//中间删除
void InitSeqList(SeqList* s)//初始化
{
memset (s->array ,0,sizeof(DateType)*N);
s->size=0;
}
void PushBack(SeqList* s, DateType x)//尾插
{
//防御式编程
assert(s);
if(s->size==N)
{
printf("SeqList is NULL!\n");
return;
}
s->array[s->size++]=x;
//s->size++;
}
void PrintSeqList(SeqList*s)//打印
{
size_t i;
for(i=0;i<s->size;++i)
{
printf("%d",s->array[i]);
}
printf("\n");
}
void PopBack(SeqList* s)//尾删
{
assert(s);
if(s->size==0)
{
printf("SeqList is Empty\n");
return;
}
//s->array[s->size-1]=0;
s->size--;
}
void PushFront(SeqList*s,DateType x)//头插
{
int i=s->size-1;
assert(s);
if(s->size==N)
{
printf("SeqList is FULL!\n");
return ;
}
for(;i>=0;--i)
{
s->array[i+1]=s->array[i];
}
s->array[0]=x;
s->size++;
}
void PoPFront(SeqList*s)//头删
{
int i=0;
assert(s);
if(s->size==0)
{
printf("SeqList is Empty\n");
return ;
}
for(;i<s->size-1;++i)
{
s->array[i]=s->array[i+1];
}
s->size--;
}
void Insert(SeqList*s ,size_t pos,DateType x)//中间插入
{
size_t end;
assert(s);
assert(pos<=s->size);
if(s->size==N)
{
printf("SeqList is FULL\n");
return ;
}
for(end=s->size-1;end>=(int)pos;end--)
{
s->array[end+1]=s->array[end];
}
s->array[pos]=x;
s->size++;
}
void Erase(SeqList* s,size_t pos)
{
int i;
assert(s);
assert(pos<s->size);//为真就正常,为假就报错
if(s->size==0)
{
printf("SeqList is Empty\n");
return ;
}
for(i=pos;i<s->size-1;++i)
{
s->array[i]=s->array[i+1];
}
s->size--;
}
#include<stdio.h>
#include"顺序表.h"
int main()
{
SeqList s;
InitSeqList(&s);
PushBack(&s,1);//尾部插入
PushBack(&s,2);
PushBack(&s,3);
PushBack(&s,4);
PrintSeqList(&s);
PopBack(&s);//尾删
PopBack(&s);
PopBack(&s);
PrintSeqList(&s);
PushFront(&s,1);//头部插入
PushFront(&s,2);
PushFront(&s,3);
PushFront(&s,4);
PrintSeqList(&s);
PoPFront(&s);//头删
PrintSeqList(&s);
Insert(&s ,3,9);//中间插入
PrintSeqList(&s);
Erase(&s,2);//中间删除
PrintSeqList(&s);
return 0;
}