概述
数据结构:线性表的理解及使用(C/C++)
实验题目:创建一个线性表L,里面所有元素为整数,编写声明,插入,打印,以及分裂线性表的函数。其中分裂函数将线性表中第1,3,5 …个元素存入线性表L1,其余元素存入L2. 所有功能在主函数中实现。
代码如下:
#include<stdio.h>
#include<iostream>
#include<stdlib.h>
#define INIT_SIZE 100 /*线性表初始长度分配量*/
#define INCREMENT 10 /* 线性表存储分配量增量*/
#define OK 1
#define ERROR 0
using namespace std;
typedef int Elemtype;
typedef int Status;
typedef struct{
Elemtype *elem;//元素存储空间基地址
int length;//表的当前长度
int listsize;//表的初始分配存储容量
}SqList;
Status InitList_Sq(SqList *L)//线性表初始化
{
L->elem=(Elemtype*)malloc(INIT_SIZE*sizeof(Elemtype));
if(!L->elem){
return ERROR;
}
L->length=1;
L->listsize=INIT_SIZE;
return OK;
}
Status ListInsert_Sq(SqList *L,int i, Elemtype e){ //线性表的插入函数
int j;
Elemtype *NewSpace;
//插入位置不合法
if(i<1||i>L->length)
{
return ERROR;
}//判断程序是否溢出
if(L->length>=L->listsize){
NewSpace=(Elemtype*)realloc(L->elem,(L->listsize+INCREMENT)*sizeof(Elemtype)); //用realloc语句增加存储分配
if(!NewSpace){
return ERROR;
}
L->elem=NewSpace;
L->listsize+=INCREMENT;
}
for(j=L->length;j>=i;j--){
L->elem[j]=L->elem[j-1];//元素后移一位
}
L->elem[j]=e;//插入元素e
L->length+=1;
return OK;
}
void ListSplit(SqList * L,SqList * L1,SqList * L2){//线性表分解函数
int k=0,i=0,j=0;
for(i=0;i<L->length;++i){
if(L->elem[i]%2==0)
{
while(j!=L->length){
L2->elem[j]=L->elem[i];//若为偶元素则赋值给L2
L2->length++; //L2长度加一
j++;
break;
}
}
else{
while(k!=L->length)
{
L1->elem[k]=L->elem[i];//其他元素赋值给L1
L1->length++;
k++;
break;
}
}
}
}
void PrintElem(SqList *L){ //线性表输出
for(int i=0;i<L->length-1;i++){
if(L->elem[i]<22)
cout<<L->elem[i]<<" ";
else
break;
}
cout<<endl;
}
int main(){
int i;
SqList L,L1,L2;
InitList_Sq(&L);
InitList_Sq(&L1);
InitList_Sq(&L2);
for(i=1;i<=21;i++){
ListInsert_Sq(&L,i,i);
}
ListSplit(&L,&L1,&L2);
cout<<"L:";
PrintElem(&L);
cout<<"L1:";
PrintElem(&L1);
cout<<"L2:";
PrintElem(&L2);
return 0;
}
运行结果:
最后
以上就是沉默斑马为你收集整理的数据结构:线性表的理解及使用(C/C++)数据结构:线性表的理解及使用(C/C++)的全部内容,希望文章能够帮你解决数据结构:线性表的理解及使用(C/C++)数据结构:线性表的理解及使用(C/C++)所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复