#include <stdio.h>
#include <stdlib.h>
#define LIST_INIT_SIZE 100 //线性表储存空间的初始分配
#define LISTINCREMENT 10 //线性表储存空间的分配增量
#define WantAmount 5
#define TRUE 1
#define FALSE 0
#define ERROR 0
#define OK 1
#define OVERFLOW -2
#define INFEASIBLE -1
typedef int ElemType;
typedef int Status;
typedef struct{
ElemType *elem;
int length;
int listsize;
}SqList;
Status ListEmpty(SqList L) //判空
{
if(L.length<=0) return TRUE;
else return ERROR;
}
Status InitList_Sq(SqList L){ //初始化initial
L->elem=(ElemType)malloc(LIST_INIT_SIZE*sizeof(ElemType));
if(!L->elem) exit(OVERFLOW);
L->length=0;
L->listsize=LIST_INIT_SIZE;
return OK;
}
int Find(SqList L,ElemType n) //查找
{
int pos=0;
if(ListEmpty(L))
{
printf("顺序表为空,找不到");
return ERROR;
}
while(pos<L.length&&L.elem[pos]!=n)pos++;
if(pos<L.length) return pos+1;
else return ERROR ;
}
Status ListInsert_Sq(SqList *L,int i,ElemType e)
//在顺序线性表L中第i个位置之前插入新的元素e
{ ElemType *newbase;
ElemType *p;
ElemType *q;
if(i<1||i>L->length+1)return ERROR;//i值不合法
if(L->length>=L->listsize) //当前存储空间已满,增加分配
{
newbase=(ElemType *)realloc(L->elem,
(LISTINCREMENT+L->listsize)*sizeof(ElemType));
if(!newbase)exit(OVERFLOW) ; //存储分配失败
L->elem=newbase; //新基址
L->listsize+=LISTINCREMENT ; //增加存储容量
}
q=&(L->elem[i-1]); //q为插入位置
for(p=&(L->elem[L->length-1]);p>=q;--p)*(p+1)=*p;
//元素右移
*q=e; //插入e
++L->length;
return OK;
}
Status GIVEBIRTH(SqList *L)
{ int i,x;
for(i=0;i<WantAmount;i++)
{
scanf("%d",&x);
ListInsert_Sq(L,i+1,x);
}
return OK;
}
Status DisplayList(SqList M)
{
int i;
for(i=0;i<WantAmount;i++)
{
printf("%d\t",M.elem[i]);
}
printf("\n");
return OK;
}
Status FindIt(SqList L)
{ int w,x;
printf("find the position of-");
scanf("%d\n",&x);
w=Find(L,x);
printf("the location of %d is %d",x,w);
//这句话为什么要在按下除ENTER外的任意键才出现?!?!
return OK;
}
void main(){
SqList L;
InitList_Sq(&L);
printf("请输入%d个数:\n",WantAmount);
GIVEBIRTH(&L);
DisplayList(L);
FindIt(L);
getch();
}
程序的主要任务是顺序表的实现,查找某个数字的位置(FindIt(SqList L))
运行的时候有一个小问题,
在控制台上显示find the position of-后,然后我输入要查找的数字,但之后按回车就是跳不出应该显示的内容,一定要再按一个不是 回车键 的键,才能显示之后的内容,怎么回事啊?
求解释,谢谢了。
scanf("%d\n",&x); 这个需要回车才能接受当前的输入数据。
w=Find(L,x);
printf("the location of %d is %d",x,w);
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。