动态顺序链表
头文件
#include <stdio.h>
#include <stdlib.h>
#include <assert.h>
typedef int DataType;
创建结构体
typedef struct SqeList{
DataType* a;
int size;
int capacity;
} SL;
初始化
void SqelistInit ( SL* P) {
P- > a = ( DataType* ) malloc ( sizeof ( DataType) * 4 ) ;
if ( P- > a == NULL ) {
printf ( "分配内存失败" ) ;
exit ( - 1 ) ;
}
P- > size = 0 ;
P- > capacity = 4 ;
}
检测是否没有空间了,若无,则扩容
void SeqListCheckCapacity ( SL* P) {
if ( P- > size == P- > capacity) {
P- > capacity* = 2 ;
P- > a= ( DataType* ) realloc ( P- > a, sizeof ( DataType) * P- > capacity) ;
}
}
输出链表中的数据
void SeqListPrint ( SL* P) {
for ( int i= 0 ; i< P- > size; ++ i) {
printf ( "%d " , P- > a[ i] ) ;
}
}
插入最后一个数
void SeqListPushBack ( SL* P, DataType x) {
assert ( P) ;
P- > a[ P- > size] = x;
P- > size++ ;
SeqListCheckCapacity ( P) ;
}
删除最后一个数
void SeqListPopBack ( SL* P) {
assert ( P) ;
P- > size-- ;
}
插入首位数字
void SeqListPushFront ( SL* p, DataType x) {
assert ( p) ;
SeqListCheckCapacity ( p) ;
int end= p- > size;
while ( end> 0 ) {
p- > a[ end] = p- > a[ end- 1 ] ;
end-- ;
}
p- > a[ 0 ] = x;
p- > size++ ;
}
删除第一个数
void SeqListPopFront ( SL* p) {
assert ( p) ;
for ( int i= 0 ; i< p- > size- 1 ; ++ i) {
p- > a[ i] = p- > a[ i+ 1 ] ;
}
p- > size-- ;
}
任意位置插入
void SeqListInsert ( SL* p, int pos, DataType x) {
assert ( p) ;
int end= p- > size- 1 ;
while ( end>= pos- 1 ) {
p- > a[ end+ 1 ] = p- > a[ end] ;
end-- ;
}
p- > a[ pos- 1 ] = x;
p- > size++ ;
}
任意位置删除
void SeqListErase ( SL* p, int pos) {
assert ( p) ;
for ( int i= pos- 1 ; i< p- > size- 1 ; ++ i) {
p- > a[ i] = p- > a[ i+ 1 ] ;
}
p- > size-- ;
}
主函数
int main ( ) {
SL q;
SqelistInit ( & q) ;
SeqListPushBack ( & q, 1 ) ;
SeqListPushBack ( & q, 2 ) ;
SeqListPushBack ( & q, 3 ) ;
SeqListPushBack ( & q, 4 ) ;
SeqListPushBack ( & q, 5 ) ;
SeqListPushBack ( & q, 6 ) ;
SeqListPushBack ( & q, 7 ) ;
SeqListPushBack ( & q, 8 ) ;
SeqListPushBack ( & q, 9 ) ;
SeqListPushFront ( & q, 5 ) ;
SeqListPopFront ( & q) ;
SeqListInsert ( & q, 2 , 3 ) ;
SeqListErase ( & q, 2 ) ;
SeqListPrint ( & q) ;
}