顺序表
// copyright of matter . 2014-9-29 //
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<algorithm>
#define INCREMENT 10
#define LIST_INIT_SIZE 100
using namespace std;
/*结构体*/
typedef struct {
int *element;
int Length;
int Listsize;
}sqllist;
/*函数声明区域*/
bool initSqlist(sqllist &S1);//初始化
bool insertSqlist(sqllist &S1,int i,int e);//插入
void foreachSqlist(sqllist &S1);//遍历
bool deleSqlist(sqllist &S1, int i, int &e);//删除
bool MergeList(sqllist S1, sqllist S2, sqllist &S3);合并两个非降序线性表到Lc中
/*-------------*/
int main(){
sqllist L1,L2,L3;
int val,i,Node,temp;
if(initSqlist(L1)&&initSqlist(L2))//对两个线性表初始化
{
printf("线性表创建成功!\n");
} else
{
printf("线性表创建失败!\n");
}
printf("对L1表进行初始插入操作..\n");
for(i=0;i<5;++i)//尝试对L1进行初始化插入操作
{
printf("请输入插入第%d的值val=",i+1);
scanf("%d",&val);
insertSqlist(L1,i,val);
}
printf("对L2表进行初始插入操作..\n");
for(i=0;i<5;++i)//尝试对L2进行初始化插入操作
{
printf("请输入插入第%d的值val=",i+1);
scanf("%d",&val);
insertSqlist(L2,i,val);
}
//遍历输出
printf("遍历输出L1为..\n");
foreachSqlist(L1);
printf("\n遍历输出L2为..\n");
foreachSqlist(L2);
//尝试对L1进行删除节点操作
printf("\n请输入要删除节点Node=");
scanf("%d",&Node);
if(deleSqlist(L1,Node-1,temp))//L1是表名,Node是下标,temp是临时存放删除值的变量
{
printf("删除成功!,您成功删除了第%d节点的值,其值为%d",Node,temp);
}else{
printf("删除失败!");
exit(-1);
}
printf("删除节点后遍历输出L1为..\n");
foreachSqlist(L1);
printf("\n");
//把L1,L2合并两个非降序线性表到L3中
MergeList(L1,L2,L3);
//在把L3遍历
printf("合并后L3遍历输出:");
foreachSqlist(L3);
return 0;
}
/*初始化顺序表,返回bool值*/
bool initSqlist(sqllist &S1){
S1.element=(int*)malloc(sizeof(int)*LIST_INIT_SIZE);//malloc动态分配内存
if(!S1.element)
{
return false;
exit(-1);
}//完备性,若分配内存失败,则返回false,并退出程序
S1.Listsize=LIST_INIT_SIZE;//初始存储容量
S1.Length=0;//初始线性表长度为0
return true;
}
bool insertSqlist(sqllist &S1,int i,int e)
{
if(i<0||i>S1.Length) return false;//完备性,i不合法
if(S1.Length == S1.Listsize){
S1.element = (int *) realloc(S1.element, sizeof(int) * (S1.Listsize += INCREMENT));
if(!S1.element) return false;
} //额外增加空间
for(int j = S1.Length - 1; j >= i; --j)
S1.element[j + 1] = S1.element[j];
S1.element[i] = e;
++S1.Length;
return true;
}
void foreachSqlist(sqllist &S1)
{
for(int i=0;i<S1.Length;++i)
{
printf("%d ",S1.element[i]);
}
return;
}
bool deleSqlist(sqllist &S1, int i, int &e)
{
if(i<0||i>S1.Length){
return false;
}//完备性
e=S1.element[i];
for(int j=i;j<S1.Length;++j)
S1.element[j]=S1.element[j+1];
--S1.Length;
return true;
}
bool MergeList(sqllist S1, sqllist S2, sqllist &S3){
sort(S1.element, S1.element + S1.Length);//先对S1,和S2进行排序
sort(S2.element, S2.element + S2.Length);
/*for(int i=0;i<S1.Length;++i)
{
printf("%d",S1.element[i]);
}*///测试排序
S3.Length=0;
S3.Listsize=LIST_INIT_SIZE;
S3.element=(int*)malloc(sizeof(int)*S3.Listsize);
if(!S3.element)
{
return false;
exit(-1);
}//初始化S3
int pa=0,pb=0,pc=0;
while(pa < S1.Length && pb < S2.Length) {
if(S1.element[pa] < S2.element[pb])
insertSqlist(S3, pc++, S1.element[pa++]);
else
insertSqlist(S3, pc++, S2.element[pb++]);
}
while(pa<S1.Length)
{
insertSqlist(S3, pc++, S1.element[pa++]);
}
while(pb<S2.Length)
{
insertSqlist(S3, pc++, S2.element[pb++]);
}
return true;
}
顺序表
最新推荐文章于 2023-03-02 20:10:08 发布