头文件
sqList.h
#ifndef SQLIST_H_INCLUDED
#define SQLIST_H_INCLUDED
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct{
int *p;
int lenght;
int listsize;
}SqList;
void InitList_Sq(SqList &L);
// 构造一个空的线性表L
void DestroyList_Sq(SqList &L);
// 销毁线性表L
void ClearList_Sq(SqList &L);
// 将L重置为空
bool ListEmpty_Sq(SqList L);
// 判断L是否为空
int ListLength_Sq(SqList L);
// 返回L中数据元素的个数
bool GetElem_Sq(SqList L,int pos,int &e);
// 用e返回L中第pos个数据元素的值
bool ListInsert_Sq(SqList &L,int pos,int e);
// 在L中第pos个位置之前插入新的元素e
bool ListDelete_Sq(SqList &L,int pos,int &e);
// 删除L的第pos个数据元素,并用e返回
int LocateElem_Sq(SqList L,int e);
// 返回L中第一个与e相等的数据元素的位序
#endif // SQLIST_H_INCLUDED
sqList.cpp
#include "sqList.h" #includevoid InitList_Sq(SqList &L) { L.p=(int*)malloc(LIST_INIT_SIZE* sizeof(int)); if(!L.p) exit(-1); L.lenght=0; L.listsize=LIST_INIT_SIZE; } void DestroyList_Sq(SqList &L){ free(L.p); // 释放p指向的内存空间 L.p = NULL; L.lenght = 0; L.listsize = 0; } void ClearList_Sq(SqList &L){ L.lenght = 0; } bool ListEmpty_Sq(SqList L){ return L.lenght == 0; } int ListLength_Sq(SqList L){ return L.lenght; } bool GetElem_Sq(SqList L,int pos,int &e){ if(pos<1||pos>L.lenght) return false; e = L.p[pos-1]; return true; } bool ListInsert_Sq(SqList &L,int pos,int e){ if(pos<1||pos>L.lenght+1) return false; if(L.lenght>=L.listsize){ int * newbase = (int *)realloc(L.p,(L.listsize+LISTINCREMENT)*sizeof(int)); if(!newbase) exit(-1); L.p = newbase; L.listsize += LISTINCREMENT; } int *q = &(L.p[pos-1]); // q为插入位置 for(int *p1=&(L.p[L.lenght-1]);p1>=q;--p1) *(p1+1) = *p1; *q = e; ++L.lenght; return true; } bool ListDelete_Sq(SqList &L,int pos,int &e){ if(pos<1||pos>L.lenght) return false; int *q = &(L.p[pos-1]); // q为删除位置 e = *q; int *p1 = &(L.p[L.lenght-1]); for(++q;q<=p1;q++) *(q-1) = *q; --L.lenght; return true; } int LocateElem_Sq(SqList L,int e){ for(int i=0;i 主文件
main.cpp
#include#include #include "sqList.h" void PrintList_Sq(SqList L){ for(int i=0;i int La_len = La.lenght; int Lb_len = Lb.lenght; int i=1,j=1,k=1; int a,b; while((i<=La_len)&&(j<=Lb_len)){ GetElem_Sq(La,i,a); GetElem_Sq(Lb,j,b); if(a>b){ ListInsert_Sq(Lc,k++,b); ++j; }else{ ListInsert_Sq(Lc,k++,a); ++i; } } while(i<=La_len){ GetElem_Sq(La,i++,a); ListInsert_Sq(Lc,k++,a); } while(j<=Lb_len){ GetElem_Sq(Lb,j++,b); ListInsert_Sq(Lc,k++,b); } } int main(){ SqList l2,l3,l4; int a[] = {1,3,5,7},b[] = {2,4,6,8}; InitList_Sq(l2); InitList_Sq(l3); InitList_Sq(l4); for(int i=1;i<=4;i++){ ListInsert_Sq(l2,i,a[i-1]); ListInsert_Sq(l3,i,b[i-1]); } printf("The output results are as follows:nL2: "); PrintList_Sq(l2); printf("nL3: "); PrintList_Sq(l3); MerageList_Sq(l2,l3,l4); printf("nThe output results are as follows:nL4: "); PrintList_Sq(l4); return 0; } 运行结果
【注】主文件为main.cpp,不是main.c,因此新建codeblocks项目时应该选择C++,否则程序执行不起来的。
然后打开main.cpp文件,需要将里面的代码全部去掉,然后写相应的C语言代码。
头文件没有生效的读者可以看看这位大佬的这篇文章,文章链接为:Code::Blocks使用—main.c引用其它.h文件引用无效解决



