栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

数据结构(C语言版)严蔚敏->顺序表的定义及合并顺序表

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据结构(C语言版)严蔚敏->顺序表的定义及合并顺序表

头文件

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"
#include 

void 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文件引用无效解决

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1002271.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号