#文章为入门菜鸟在学习过程中的笔记,望各位大佬能帮忙指出错误。感激万分
#include<stdio.h>
#include<stdlib.h>
#define TRUE 1
#define ERROR 1
#define FALSE 0
#define OK 1
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int Status;
#define InitSize 5 //初始化分配空间为5
// 声明一个结构体表示顺序表
typedef struct{
int *data;
int length;
int listsize;
}SqList;
// 初始化顺序表
Status InitList_sq(SqList &L){
//sq表示顺序表
L.data=(int*)malloc(sizeof(int)*InitSize); //malloc分配空间
if(!L.data) exit(OVERFLOW); //若存储成功则返回地址若失败则为0,所以失败后则报错
L.length=0;
L.listsize=InitSize;
return OK;
}
// 输出顺序表
void PrintList_sq(SqList &L){
for(int i=0;i<L.length;i++){
printf("%d ",L.data[i]);
}
printf("\n顺序表的表长为%d\n",L.length);
printf("-------------------------------\n");
}
// 在第i个位置插入一个元素e
Status ListInsert_sq(SqList &L,int i,int e) {
if(i<1||i>L.length+1) return ERROR; //i合法值为 1 <= i >=L.length + 1
if(L.length>=L.listsize){
int *newbase = (int*)realloc(L.data,sizeof(int)*(L.listsize+1)); //realloc为malloc分配的空间重新设置
if(!newbase) exit(OVERFLOW);
L.data=newbase;
L.listsize++;
}
for(int j=L.length-1;j>=i-1;j--){
L.data[j+1]=L.data[j];
}
L.data[i-1]=e;
L.length++;
return OK;
}
//删除第i个位置的元素
Status ListDelete_sq(SqList &L,int i){
if(i<1||i>L.length-1) exit(ERROR);
for(int j=i-1;j<L.length-1;j++){
L.data[j]=L.data[j+1];
}
L.length--;
return OK;
}
//查找元素返回其位置
int LocateElem_sq(SqList &L,int e){
for(int i=0;i<L.length;i++){
if(L.data[i]==e)return i+1;
}
return 0;
}
//集合合并
void Union(SqList &La,SqList &Lb){
for(int i=0;i<Lb.length;i++){
int e = Lb.data[i];
if(!LocateElem_sq(La,e)){
ListInsert_sq(La,La.length+1,e);
}
}
}
//排序
Status ListSort_sq(SqList &L){
for(int i=0;i<L.length;i++){
for(int j=i+1;j<L.length;j++){
if(L.data[i]>L.data[j]){
int temp=L.data[j];
L.data[j]=L.data[i];
L.data[i]=temp;
}
}
}
return OK;
}
int main(){
SqList L;
InitList_sq(L);
printf("输入%d个数以空格隔开:\n",L.listsize);
for(int i=0;i<L.listsize;i++){
scanf("%d",&L.data[i]);
L.length++;
}
PrintList_sq(L);
ListInsert_sq(L,3,50);
PrintList_sq(L); //输出插入后的 顺序表
ListInsert_sq(L,6,21);
PrintList_sq(L);
ListDelete_sq(L,2); //删除第2个元素
PrintList_sq(L);
printf("%d的位置为%d",12,LocateElem_sq(L,12));
//合并为集合:
SqList La,Lb;
InitList_sq(La);
printf("输入%d个数以空格隔开:\n",La.listsize);
for(int i=0;i<La.listsize;i++){
scanf("%d",&La.data[i]);
La.length++;
}
InitList_sq(Lb);
printf("输入%d个数以空格隔开:\n",Lb.listsize);
for(int i=0;i<Lb.listsize;i++){
scanf("%d",&Lb.data[i]);
Lb.length++;
}
ListSort_sq(La);
PrintList_sq(La);
PrintList_sq(Lb);
Union(La,Lb);
ListSort_sq(La);
PrintList_sq(La);
}