数据结构(C语言版)严蔚敏->顺序表的定义及合并顺序表
Posted il_持之以恒_li
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据结构(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 <stdlib.h>
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<L.lenght;i++)
if(L.p[i]==e)
return i+1;
return -1;
主文件
main.cpp
#include <stdio.h>
#include <stdlib.h>
#include "sqList.h"
void PrintList_Sq(SqList L)
for(int i=0;i<L.lenght;i++)
printf("%d ",L.p[i]);
void MerageList_Sq(SqList La,SqList Lb,SqList &Lc)
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文件引用无效解决
以上是关于数据结构(C语言版)严蔚敏->顺序表的定义及合并顺序表的主要内容,如果未能解决你的问题,请参考以下文章
数据结构(C语言版)严蔚敏->单链表的定义及合并两个有序单链表
数据结构(C语言版)严蔚敏->单链表的定义及合并两个有序单链表
谁有《数据结构》(C语言版)严蔚敏,清华大学2005年的课本?麻烦把目录告知,非常感谢