头文件
#ifndef __SEQLIST_H__
#define __SEQLIST_H__
#include<stdio.h>
#include<malloc.h>
#include<assert.h>
#define SEQLIST_INIT_SIZE 8
#define INC_SIZE 3
typedef int ElmeType;
typedef struct SeqList
{
ElmeType *base;
int capacity;
int size;
}SeqList;
bool Inc(SeqList *list);
void InitSeqList(SeqList *list);
void push_back(SeqList *list,ElmeType x);
void push_front(SeqList *list,ElmeType x);
void show_list(SeqList*list);
void pop_back(SeqList *list);
void pop_front(SeqList *list);
void insert_pos(SeqList *list,ElmeType x,int pos);
int find(SeqList *list,ElmeType key);
int length(SeqList *list);
void delete_pos(SeqList *list,int pos);
void delete_val(SeqList *list,ElmeType key);
void sort(SeqList *list);
void resver(SeqList *list);
void clear(SeqList *list);
void destroy(SeqList *list);
void merge(SeqList *lt,SeqList *la,SeqList *lb);
#endif
实现函数
#include "SeqList.h"
void merge(SeqList *lt,SeqList *la,SeqList *lb){
lt->capacity = la->size+lb->size;
lt->base=(ElmeType*)malloc(sizeof(ElmeType)*lt->capacity);
assert(lt->base!=NULL);
int ia=0;
int ib=0;
int ic=0;
while (ia<la->size &&ib<lb->size)
{
if(la->base[ia]<lb->base[ib])
lt->base[ic++]=la->base[ia++];
else
lt->base[ic++]=lb->base[ib++];
}
while (ia<la->size)
{
lt->base[ic++]=la->base[ia++];
}
while (ib<lb->size)
{
lt->base[ic++]=lb->base[ib++];
}
lt->size=la->size+lb->size;
}
bool Inc(SeqList *list){
ElmeType *newbase =(ElmeType *)realloc(list->base,sizeof(ElmeType)*(INC_SIZE+SEQLIST_INIT_SIZE));
if(newbase==NULL){
printf("分配空间失败,内存不足");
return false;
}
list->base=newbase;
list->capacity+=INC_SIZE;
return true;
}
void InitSeqList(SeqList *list){
list->base = (ElmeType *)malloc(sizeof(ElmeType)*SEQLIST_INIT_SIZE);
assert(list->base!=NULL);
list->capacity=SEQLIST_INIT_SIZE;
list->size=0;
}
void push_back(SeqList *list,ElmeType x){
if(list->size>=list->capacity&& !Inc(list)){
printf("顺序表空间已满,%d不能尾部插入数据\n",x);
return;
}
list->base[list->size]=x;
list->size++;
}
void push_front(SeqList *list,ElmeType x){
if(list->size>=list->capacity){
printf("超出数组大小\n");
return;
}
for (int i = list->size; i >0; --i)
{
list->base[i]=list->base[i-1];
}
list->base[0]=x;
list->size++;
}
void show_list(SeqList*list){
for (int i = 0; i <list->size; ++i)
{
printf("%4d",list->base[i]);
}
printf("\n");
}
void pop_back(SeqList *list){
if(list->size==0){
printf("数组为空");
return;
}
list->size--;
}
void pop_front(SeqList *list){
if(list->size==0){
printf("数组为空");
return;
}
for (int i = 0; i < list->size-1; i++)
{
list->base[i]=list->base[i+1];
}
list->size--;
}
void insert_pos(SeqList *list,ElmeType x,int pos){
if (pos<0 ||pos>list->size)
{
printf("插入失败:\n");
return;
}
if(list->size>=list->capacity&& !Inc(list)){
printf("顺序表空间已满,%d不能尾部插入数据\n",x);
return;
}
for (int i=list->size;i>pos;--i){
list->base[i]=list->base[i-1];
}
list->base[pos]=x;
list->size++;
}
int find(SeqList *list,ElmeType key){
for (int i = 0; i < list->size; ++i)
{
if (list->base[i]==key)
{
return i;
}
}
return -1;
}
int length(SeqList *list){
return list->size;
}
void delete_pos(SeqList *list,int pos){
if(pos <0||pos>=list->size){
printf("输入的位置非法!不能删除数据\n");
return;
}
for (int i = pos; i <list->size-1; ++i)
{
list->base[i]=list->base[i+1];
}
list->size--;
}
void delete_val(SeqList *list,ElmeType key){
int pos=find(list,key);
if(pos ==-1){
printf("要删除的数据不存在\n");
return;
}
delete_pos(list,pos);
}
void sort(SeqList *list){
for (int i = 0; i < list->size-1; ++i)
{
for (int j=0;j<list->size-i-1;++j){
if (list->base[j]>list->base[j+1])
{
ElmeType temp=list->base[j];
list->base[j]=list->base[j+1];
list->base[j+1]=temp;
}
}
}
}
void resver(SeqList *list){
if(list->size==0||list->size==1)
return;
int low=0;
int high=list->size-1;
ElmeType tmp;
while (low<high)
{
tmp=list->base[low];
list->base[low]=list->base[high];
list->base[high]=tmp;
low++;
high--;
}
}
void clear(SeqList *list){
list->size=0;
}
void destroy(SeqList *list){
free(list->base);
list->base=NULL;
list->capacity=0;
list->size=0;
}
主函数
#include "SeqList.h"
void main(){
SeqList mylist,youlist,list;
InitSeqList(&mylist);
InitSeqList(&youlist);
push_back(&mylist,1);
push_back(&mylist,3);
push_back(&mylist,5);
push_back(&mylist,7);
push_back(&mylist,9);
push_back(&youlist,2);
push_back(&youlist,4);
push_back(&youlist,6);
push_back(&youlist,8);
push_back(&youlist,11);
push_back(&youlist,12);
merge(&list,&mylist,&youlist);
show_list(&list);
}