#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#define Status int
#define ElemType int
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
#define LIST_INIT_SIZE 100 //线性表存储空间的初始分配量
#define LISTINCREMENT 10 //线性表存储空间的分配增量
#define MAXSIZE 100
typedef struct{
int *elem;
ElemType *p;
int size;
int length;
int data;
}SqList;
//创建顺序表
int CreateList(SqList *L,int size){
printf("请输入数据元素:");
L->length=size;
L->p=(int *)malloc(sizeof(int)* size);
int *b=L->p;
for(int i=0;i<size;i++){
scanf("%d",b);
b++;
}
printf("\n");
}
//输出有序表L2
void show(SqList L){
for(int i=0;i<L.size;i++)
printf("%d",*(L.p++));
printf("\n");
}
//数据元素的插入
Status ListInsert_sq(SqList *p,int e,ElemType i)
{
if(i<1 || i>p->size+1)
{
printf("插入的位置不合法!\n");
return ERROR; //i的值不合法
}
int *q=&(p->elem[i-1]);
for(int *h=&(p->elem[p->length-1]);h>=q;--h) //h指向最后一个元素的指针
*(h+1)=*h; //插入位置及之后的元素右移
*q=e; //插入e
++p->size;
printf("插入成功!\n");
return OK;
}
//数据元素的删除
int Delete(SqList *L,int i){
int *q,*p;
if ((i<1) || (i>L->size))
{
printf("输入不合法!");
return ERROR;
p=&(L->elem[i-1]);
q=L->elem+L->size-1;
for(++q;p<=q;++p) //被删除元素之后的元素前移
*(p-1)=*p;
L->size--; //表长减1
printf("删除成功!");
return OK;
}
//数据元素的定位算法
void LocateElem_Sq(SqList L, ElemType e)
{
for(int i=0;i<=L.size-1;i++) {
if(L.data[i]==e)
printf("元素%d的位置序号是%d\n",e,i+1);
return 0;
}
if(L.data[i]>=L.length){
printf("元素%d不存在\n",e);
return 0;
}
}
//两个有序表的归并
SqList MergeList(SqList L,SqList L1) {
SqList L2;
L2.size=L.size+L1.size;
L2.p=(int *)malloc(sizeof(int) * L2.size);
int *d=L2.p;
int size_L=0;
int size_L1=0;
while(size_L<L.size&&size_L1<L1.size){
if(*L.p<*L1.p){
*d=*L.p;
L.p++;
size_a++;
}
else{
*d=*L1.p;
L1.p++;
size_L1++;
}
d++;
}
while(size_L<L.size){
*(d++)=*(L.p)++;
size_L++;
}
while(size_L1<L1.size ){
*(d++)=*(L1.p)++;
size_L1++;
}
return L2;
}
//主函数
int main()
{
int n,i,e;
int a,b;
SqList L,L1;
int A,B;
//顺序表的创建
printf("创建顺序表L\n");
printf("请输入有序表L的长度:");
scanf("%d",&A);
CreateList(&L,A);
printf("创建顺序表L1\n");
printf("请输入有序表L2的长度:");
scanf("%d",&B) ;
CreateList(&L1,B);
printf("\n顺序表L与顺序表L1合并得L2为:\n");
L2=Merge(L,L1);
show(L2);
printf("数据元素的插入");
printf("\n请输入需要插入顺序表L2的元素:") ;
scanf("%d",&e) ;
printf("请输入需要插入顺序表L2的位置:");
scanf("%d",&i);
ListInsert_sq(&L2,e,i);
printf("数据元素的删除");
printf("\n请输入需要删除顺序表L2中元素的位置:");
scanf("%d",&a) ;
Delete(&L2,a);
printf("数据元素的定位\n");
printf("请输入需要查找的元素:");
scanf("%d",&b);
LocateElem_Sq(L2,b);
return 0;
}
显示的是符号的错误,就很迷茫???
你的68行少了一个},你只有if的{,没有}。
你的LocateElem_Sq函数也有问题,最后比较应该是i和L.length比较。
代码应该如下:
void LocateElem_Sq(SqList L, ElemType e)
{
int i;
for(i=0;i<=L.size-1;i++) {
if(L.data[i]==e){
printf("元素%d的位置序号是%d\n",e,i+1);
break;
}
}
if(i >=L.length){
printf("元素%d不存在\n",e);
}
}