本篇文章给大家谈谈c语言数据结构线性表的合并,以及用c语言编写线性表的结构定义对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
1、用顺序存储实现两个线性表合并2、求C语言程序代码,合并线性表3、C语言数据结构四个线性表合并排序怎么写?4、数据结构(C语言)顺序表的合并5、数据结构C语言版,顺序线性表的合并程序。最好有注释6、C语言数据结构将两个有序线性表合并成一个并去掉重复元素
用顺序存储实现两个线性表合并
合并两个线性表中的元素,相同的元素只保留一个,代码如下:
#pragma once
#define ListSize 200
#include iostream
using namespace std;
typedef int DataType;
typedef struct
{
DataType list[ListSize];
int length;
}SeqList;
//初始化线性表
void InitList(SeqList *L)
{
L-length = 0;//把线性表长度置为0
}
//判断线性表是否为空,线性表为空返回1,否则返回0
int ListEmpty(SeqList L)
{
if (L.length == 0)
return 1;
else
return 0;
}
//按照序号查找
int GetElem(SeqList L, int i, DataType *e)
/*查找线性表中第i个元素,查找成功返回给e,并返回1表示成功,否则返回-1,表示失败*/
{
if (i1 || iL.length)
return -1;
else
*e = L.list[i – 1];
return 1;
}
//按照内容查找
int LocateElem(SeqList L, DataType e)
{
int i;
for (i = 0; i L.length; i++)/*从第一个元素开始与e进行比较*/
if (L.list[i] == e) /*若存在与e相等的元素*/
return i + 1; /*返回该元素的在线性表中的序号*/
return 0; /*否则,返回0 */
}
//插入操作
int InsertList(SeqList *L, int i, DataType e)
/*在顺序表中的第i个位置插入元素e,插入成功返回1,插入不合法返回-1,顺序表满返回0.*/
{
int j;
if (i1||iL-length+1)/*在插入元素前,判断插入位置是否合法*/
{
cout “插入位置”i”不合法!” endl;
return -1;
}
else if (L-length=ListSize)/*在插入元素之前,判断顺序表是否已经满,不能插入元素*/
{
cout “顺序表已经满,不能插入元素。” endl;
return 0;
}
else
{
for (j = L-length; j = i; j–)
/*将第i个位置以后的元素依次后移*/
{
L-list[j] = L-list[j – 1];
}
L-list[i – 1] = e;
L-length = L-length + 1;
return 1;
}
}
/*删除操作,删除第i个元素*/
int DeleteList(SeqList *L, int i, DataType *e)
{
int j;
if (L-length=0)
{
cout “顺序表表已空,不能进行删除!” endl;
return 0;
}
else if (i1||iL-length)
{
cout “删除位置不合适!” endl;
return -1;
}
else
{
*e = L-list[i – 1];
for (j = i; j = L-length – 1;j++)
{
L-list[j – 1] = L-list[j];
}
L-length = L-length – 1;
return 1;
}
}
/*求线性表的长度*/
int ListLength(SeqList L)
{
return L.length;
}
/*清空顺序表*/
void ClearList(SeqList *L)
{
L-length = 0;
}
扩展资料
线性表的顺序存储结构,就是在内存中找到一块空间,通过占位的方式,把一定内存空间给占了,然后把相同数据类型的数据元素依次存放在这块空间中。
既然线性表的每个数据元素的类型相同,所以C语言(其他语言也相同)用一维数组来实现顺序存储结构,即把第一个数据元素存到数组下标为0的位置中,接着把线性表相邻的元素存储在数组中相邻的位置。
顺序存储的属性
三个属性:
1、存储空间的起始位置:数组data,它的存储位置就是存储空间的存储位置。
2、线性表的最大存储容量:数组的长度MaxSize.
3、线性表的当前长度:length。
求C语言程序代码,合并线性表
#includestdio.h
#includestdlib.h
#define MAXSIZE 110
typedef struct
{
int elem[MAXSIZE];
int len;
}sqlist;
void merge(sqlist *la,sqlist *lb,sqlist *lc)
{
int i,j,k;
i=j=k=0;
if(la-len+lb-len=MAXSIZE)
{
while(ila-lenjlb-len)
{
if(la-elem[i]lb-elem[j])
{
lc-elem[k]=la-elem[i];
i++;
k++;
}
else
{
lc-elem[k]=lb-elem[j];
j++;
k++;
}
}
while(ila-len)
{
lc-elem[k]=la-elem[i];
i++;
k++;
}
while(jlb-len)
{
lc-elem[k]=lb-elem[j];
j++;
k++;
}
lc-len=la-len+lb-len;
}
else printf(“out of bound”);
}
void print(sqlist *l)
{
int i;
for(i=0;il-len;i++)
{
printf(“%d “,l-elem[i]);
}
printf(“\n”);
}
int main(void)
{
int i;
sqlist la;
sqlist lb;
sqlist lc;
printf(“输入线性表LA的元素个数:”);
scanf(“%d”,la.len);
printf(“输入线性表LA的%d个元素:”,la.len);
for(i=0;ila.len;i++)
scanf(“%d”,la.elem[i]);
printf(“输入线性表LB的元素个数:”);
scanf(“%d”,lb.len);
printf(“输入线性表LB的%d个元素:”,lb.len);
for(i=0;ilb.len;i++)
scanf(“%d”,lb.elem[i]);
merge(la,lb,lc);
print(lc);
system(“pause”);
return(0);
}
C语言数据结构四个线性表合并排序怎么写?
#include #include #include #define LIST_INIT_SIZE 10 // 线性表存储空间的初始分配量 #define LISTINCREMENT 2 // 线性表存储空间的分配增量 struct SqList { int *elem; // 存储空间基址 int length; // 当前长度 int listsize; // 当前分配
数据结构(C语言)顺序表的合并
程序没什么大的毛病。。只是一些编写代码时的小疏忽
#includestdio.h
#includemalloc.h
#define
ok
1
#define
error
#define
LIST_INT_SIZE
10
#define
elemtype
int
typedef
struct{
elemtype
*elem;
int
length;
int
listsize;
}sqlist;
int
Init_sqlist(sqlist
*la)
{
(*la).elem=(elemtype*)malloc(LIST_INT_SIZE*sizeof(elemtype));
if(!(*la).elem)return
error;
(*la).length=0;
(*la).listsize=LIST_INT_SIZE;
return
ok;
}
void
mergelist_sq(sqlist
la,sqlist
lb,sqlist
lc)
//
忘了加;
void
main()
{
int
i;sqlist
la,lb,lc;
Init_sqlist(la);
Init_sqlist(lb);
for(i=0;i5;i++)
scanf(“%d”,la.elem[i]);
//
应该改为
scanf(
“%d”,la.elem[i]
);
la.length=5;
for(i=0;i5;i++)
scanf(“%d”,lb.elem[i]);
//
同上
lb.length=5;
mergelist_sq(la,lb,lc);
}
void
mergelist_sq(sqlist
la,sqlist
lb,sqlist
lc)
{
int
*pa,*pb,*pc,*pa_last,*pb_last,i;
pa=la.elem;pb=lb.elem;
lc.listsize=la.length+lb.length;
pc=lc.elem=(elemtype*)malloc(lc.listsize*sizeof(elemtype));
pa_last=la.elem+la.length-1;
pb_last=lb.elem+lb.length-1;
while(pa=pa_lastpb=pb_last){
if(*pa=*pb)*pc++=*pa++;
else
*pc++=*pb++;}
while(pa=pa_last)
*pc++=*pa++;
while(pb=pb_last)
*pc++=*pb++;
for(i=0;ilc.listsize-1;i++)
//
改为for(
i=0;
ilc.listsize;
i++
)
printf(“%d,”,lc.elem[i]);
}
数据结构C语言版,顺序线性表的合并程序。最好有注释
//希望我的回答对你的学习有帮助
#include stdlib.h
/*顺序表存储空间长度的最小值*/
#define LISTMINSIZE 10
/*顺序表存储结构类型定义*/
typedef struct
{
ListDT*base; /*顺序表空间基地址*/
intlistsize; /*顺序表空间尺寸*/
intlen; /*顺序表长度*/
}SeqList;
/*顺序表初始化*/
void ListInitialize(SeqList *pL, int size)
{
if(sizeLISTMINSIZE)
size=LISTMINSIZE; /*限定不能小于最小尺寸*/
pL-listsize=size;
pL-base=(ListDT*)malloc(pL-listsize*sizeof(ListDT));
if(!pL-base)
exit(EXIT_FAILURE);
pL-len=0; /*初始化空表*/
}
/*按给定的下标取顺序表元素值*/
BOOL ListElem(SeqList L, int index, ListDT *pelem)
{
BOOLflg=TRUE;
if(index0|| indexL.len-1 )
flg=FALSE; /*参数越界*/
else
*pelem=L.base[index];
returnflg;
}
/*求顺序表长度*/
int ListLen(SeqList L)
{
returnL.len;
}
/*在顺序表中指定序号位置插入元素*/
BOOL ListInsert(SeqList *pL, int pos, ListDT d)
{
BOOLflg=TRUE;
inti;
if(pos0|| pL-len=pL-listsize || pospL-len)
flg=FALSE;
else
{
for(i=pL-len-1;i=pos; i–) /*移动数据*/
pL-base[i+1]=pL-base[i];
pL-base[pos]=d; /*写入数据*/
pL-len++; /*表长增1*/
}
returnflg;
}
/*把顺序表中指定序号的元素删除*/
BOOL ListDel(SeqList *pL, int pos)
{
BOOLflg=TRUE;
inti;
if(pos0|| pos=pL-len)
flg=FALSE;
else
{
for(i=pos+1;ipL-len; i++) /*移动数据*/
pL-base[i-1]=pL-base[i];
pL-len–; /*表长增1*/
}
returnflg;
}
/*在顺序表中查找元素*/
int ListLoc(SeqList L, ListDT d,BOOL (*equal)(ListDT,ListDT))
{
intpos=L.len-1;
while(pos=0 !(*equal)(L.base[pos],d))
pos–;
returnpos;
}
/*取前导元素序号位置*/
BOOL ListPrior(SeqList L, int pos, int *ppriorpos)
{
BOOLflg=TRUE;
if(pos0 posL.len)
*ppriorpos=pos-1;
else
flg=FALSE;
returnflg;
}
/*取后继元素序号位置*/
BOOL ListNext(SeqList L, int pos, int *pnextpos)
{
BOOLflg=TRUE;
if(pos=0 posL.len-1)
*pnextpos=pos+1;
else
flg=FALSE;
returnflg;
}
/*销毁顺序表*/
void ListDestroy(SeqList L)
{
free(L.base);
}
#endif
/*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/
/*
建议性测试用程序
*/
typedef enum {TRUE=1,FALSE=0} BOOL;
typedef int ListDT;
#include “seqlist.c”
void printSeqList(SeqList L)
{
inti;
ListDTx;
printf(“\nList:\n”);
for(i=0;iListLen(L); i++)
{
ListElem(L,i,x);
printf(“%3d”,x);
}
}
BOOL dataequal(int x, int y)
{
return(x==y)? TRUE:FALSE;
}
#define N 5
void main()
{
inti,prior,next;
ListDTx,test[N]={10,20,30,40,50};
SeqListL;
/*初始化顺序表*/
ListInitialize(L,N);
/*在表头插入N个元素*/
for(i=0;iN; i++)
ListInsert(L,0,test[i]);
printSeqList(L);
/*删除元素*/
ListDel(L,N/2);
printSeqList(L);
printf(“\ninputa key:\n”);
scanf(“%d”,x);
/*查找x在表中位置*/
i=ListLoc(L,x,dataequal);
/*求x的前导元素*/
if(ListPrior(L,i,prior))
{
ListElem(L,prior,x);
printf(“Prior:%d\n”,x);
}
else
printf(“noPrior.\n”);
/*求x的后继*/
if(ListNext(L,i,next))
{
ListElem(L,next,x);
printf(“Next:%d\n”,x);
}
else
printf(“noNext.\n”);
/*求表长*/
printf(“Listlength=%d”,ListLen(L));
/*销毁顺序表*/
ListDestroy(L);
}
C语言数据结构将两个有序线性表合并成一个并去掉重复元素
那估计是电源充电线连接酶有链接好 可以换一根或者去售后那里进行检查
关于c语言数据结构线性表的合并和用c语言编写线性表的结构定义的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。