void input(SqList &L)//输入数据
{
scanf("%d",L.elem);
while(*L.elem)//elem是指针,加*后才是值
{
L.elem++;
L.length++;
scanf("%d",L.elem);
}
}
在这里面为什么输入0代表结束?
这是全部代码:
#include
#include
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
#define TRUE 1;
#define FALSE 0;
#define OK 1;
#define ERROR 0;
#define INFEASIBLE -1;
#define OVERFLOW -2;
//Status 是函数的类型,其值是函数结果状态代码
typedef int Status;
using namespace std;
typedef int ElemType;
typedef struct//线性表的动态顺序存储结构
{
ElemType *elem;
int length;
int listsize;
} SqList;
Status InitList_Sq(SqList &L)//初始化线性表
{
//构造一个空的线性表
L.elem=(ElemType *)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L.elem)
return OVERFLOW;
L.length=0;
L.listsize=LIST_INIT_SIZE;
return OK;
}
void input(SqList &L)//输入数据
{
scanf("%d",L.elem);
while(*L.elem)//elem是指针,加*后才是值
{
L.elem++;
L.length++;
scanf("%d",L.elem);
}
}
void print(SqList &L)//输出数据
{
int i;
for(i=0;i
{
printf("%d",*L.elem);
L.elem++;
}
}
Status ListInsert_Sq(SqList &L,int i,ElemType e)//进行插入操作
{
int *p;
int *q;
ElemType *newbase;
if(iL.length+1)
return ERROR;
if(L.length==L.listsize)
{
newbase=(ElemType )realloc(L.elem,
(L.listsize+LISTINCREMENT)*sizeof(ElemType));
if(!newbase)
return ERROR;
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;/
for(int j=L.length;j>=i;j--)
L.elem[j]=L.elem[j-1];
L.elem[i-1]=e;
++L.length;//表长加1
return OK;
}
int main()
{
SqList L;
int a[100];
int n,num;
if(InitList_Sq(L))//进行一次判断
{
L.elem=a;//将数组的首地址传递给elem
printf("请输入:\n");
input(L);
}
L.elem=a;//用的过程中指针已经移动,因此需要归位,才可以从首位用起
printf("输入的数据为:\n");
print(L);
printf("\n");
printf("输入需要插入的位置:\n");
scanf("%d",&n);
printf("输入插入的数:\n");
scanf("%d",&num);
L.elem=a;
if(ListInsert_Sq(L,n,num))
{
printf("插入后的数据元组:\n",L.length);
L.elem=a;
print(L);
}
}