#define LIST_INIT_SIZE 1000
#define LISTINCREMENT 10
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
//顺序表的存储结构定义
typedef int Status;
typedef int ElemType;
typedef struct{
int *elem; //首地址
int length; //顺序表的长度
int listsize; //顺序表的存储容量
} SqList;
Status InitList_Sq(SqList &L){ // 顺序表的初始化 L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
}// InitList_Sq
Status ListInsert_Sq (SqList &L, int i, int e) //插入
{ //在顺序表的第i个位置插入值e为的元素
if(i<1||i>L.length+1)return ERROR;
if(L.length>=L.listsize){
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;
*q=e;
++L.length;
return OK;
}// ListInsert_Sq
Status ListDelete_Sq(SqList &L, int i, int &e) //删除
{ //在顺序表的第i个位置删除一个元素,值在存进e中
if((i<1)||(i>L.length))return ERROR;
p=&(L.elem[i-1]);
e=*p;
q=L.elem+L.length-1;
foe(++p;p<=q;++p)*(p-1)=*p;
--L.length;
return OK;
}// ListDelete_Sq
int main( )
{
ElemType y;
SqList L;
int i,n;
InitList_Sq(L); /* 初始化线性表*/
printf("输入顺序表需存进的元素数量!\n");
scanf("%d",&n);
while(n<1 || n>10)
{
printf("请输入1--10之间的整数!\n");
scanf("%d",&n);
}
/* 以上循环语句的功能是控制输入数据个数的合法性,可以修改 */
printf("依次输入存进顺序表中的数据元素:\n");
for(i=1;i<=n;i++)
{
scanf("%d",&y);
ListInsert_Sq(L,i,y) ;
}
/* 以上循环语句的功能是依次输入要存进顺序表中的元素,并存进顺序表 */
printf("顺序表中的元素为:");
for(i=0; i<L.length; i++) printf("%d\t",L.elem[i]);
/* 以上循环语句的功能是依次输出顺序表中的元素*/
printf("\n");
printf("输入要删除元素的位置!\n");
scanf("%d",&n);
if(ListDelete_Sq(L,n,y)==OK) { printf("删除成功!"); printf("被删除的元素是: %d\n",y); }
printf("顺序表中的元素为:");
for(i=0; i<L.length; i++) printf("%d\t",L.elem[i]);
/* 以上循环语句的功能是依次输出顺序表中的元素*/
printf("\n");
system("pause");
return 0;
}
那些错误该怎么改正????Status InitList_Sq(SqList &L){像这个就有错误。。这些跟书上的算法一样不知道为什么弄到程序里面就错了。
#define LISTINCREMENT 10
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define OK 1
#define ERROR 0
#define OVERFLOW -2
//顺序表的存储结构定义
typedef int Status;
typedef int ElemType;
typedef struct{
int *elem; //首地址
int length; //顺序表的长度
int listsize; //顺序表的存储容量
} SqList;
Status InitList_Sq(SqList &L){ // 顺序表的初始化 L.elem=(ElemType*)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)exit(OVERFLOW);
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
}// InitList_Sq
Status ListInsert_Sq (SqList &L, int i, int e) //插入
{ //在顺序表的第i个位置插入值e为的元素
if(i<1||i>L.length+1)return ERROR;
if(L.length>=L.listsize){
newbase=(ElemType*)realloc(L.elem,(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)exit(OVERFLOW);
L.elem=newbase;
L.listsize+=LISTINCREMENT;
}
q=&(L.elem[i-1]);
for(p=&(L.elem[L.length-1]);p>=q;--p)*(p+1)=*p;
*q=e;
++L.length;
return OK;
}// ListInsert_Sq
Status ListDelete_Sq(SqList &L, int i, int &e) //删除
{ //在顺序表的第i个位置删除一个元素,值在存进e中
if((i<1)||(i>L.length))return ERROR;
p=&(L.elem[i-1]);
e=*p;
q=L.elem+L.length-1;
foe(++p;p<=q;++p)*(p-1)=*p;
--L.length;
return OK;
}// ListDelete_Sq
int main( )
{
ElemType y;
SqList L;
int i,n;
InitList_Sq(L); /* 初始化线性表*/
printf("输入顺序表需存进的元素数量!\n");
scanf("%d",&n);
while(n<1 || n>10)
{
printf("请输入1--10之间的整数!\n");
scanf("%d",&n);
}
/* 以上循环语句的功能是控制输入数据个数的合法性,可以修改 */
printf("依次输入存进顺序表中的数据元素:\n");
for(i=1;i<=n;i++)
{
scanf("%d",&y);
ListInsert_Sq(L,i,y) ;
}
/* 以上循环语句的功能是依次输入要存进顺序表中的元素,并存进顺序表 */
printf("顺序表中的元素为:");
for(i=0; i<L.length; i++) printf("%d\t",L.elem[i]);
/* 以上循环语句的功能是依次输出顺序表中的元素*/
printf("\n");
printf("输入要删除元素的位置!\n");
scanf("%d",&n);
if(ListDelete_Sq(L,n,y)==OK) { printf("删除成功!"); printf("被删除的元素是: %d\n",y); }
printf("顺序表中的元素为:");
for(i=0; i<L.length; i++) printf("%d\t",L.elem[i]);
/* 以上循环语句的功能是依次输出顺序表中的元素*/
printf("\n");
system("pause");
return 0;
}
那些错误该怎么改正????Status InitList_Sq(SqList &L){像这个就有错误。。这些跟书上的算法一样不知道为什么弄到程序里面就错了。
