
数据结构,算法与应用 ---C++语言描述(代码与习题答案) 5
展开全部
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int status;
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct
{
int *elem;
int length;
int listsize;
}sqlist;
int flag=0;
status initlist(sqlist *l)
{
l->elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
if(!l->elem)exit(OVERFLOW);
l->length=0;
l->listsize=LIST_INIT_SIZE;
return OK;
}
status listinsert(sqlist *l,int i,int e)
{
int *newbase,*q,*p;
if(i<1||i>l->length+1)return ERROR;
if(l->length>=l->listsize)
{
newbase=(int*)realloc(l->elem,(l->listsize+LISTINCREMENT)*sizeof(int));
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;
}
void listprint(sqlist *l)
{
int i;
for(i=0;i<l->length;i++)
{
printf("%-5d",l->elem[i]);
}
}
status listdelete(sqlist *l,int i,int *e)
{
int *p,*q;
if((i<1)||(i>l->length))return ERROR;
p=&(l->elem[i-1]);
e=*p;
q=l->elem+l->length-1;
for(++p;p<=q;++p)*(p-1)=*p;
--l->length;
return OK;
}
status getelem(sqlist *l,int i,int *e)
{
if((i<1)||(i>l->length))return ERROR;
*e=l->elem[i-1];
return OK;
}
int meun()
{
int a;
printf("*************************\n");
printf("* 1 InitList *\n");
printf("* 2 ListInsert *\n");
printf("* 3 ListPrint *\n");
printf("* 4 Delete *\n");
printf("* 5 Getelem *\n");
printf("* 6 Exit *\n");
printf("*************************\n");
fflush(stdin);
do
{
printf("qing xuan ze:\n");
scanf("%d",&a);
}while(!(a>=1&&a<=6));
return a;
}
void main()
{
sqlist l,*p;
int x,i,e,result;
p=&l;
do
{ clrscr();
x=meun();
switch(x)
{
case 1: initlist(p);
flag=1;
printf("initlist succes!press enter contiue");
getch();
break;
case 2: if(flag==0)
{
printf("you must initlist first!please select!");
getch();
break;
}
fflush(stdin);
printf("\n please input i and e:");
scanf("%d%d",&i,&e);
result=listinsert(p,i,e);
if(result==ERROR)
printf("error:i out of rang!press enter continue");
else
printf("insert completed!please enter continue");
getch();
break;
case 3: printf("sqlist:\n");
listprint(p);
getch();
break;
case 4: printf("\n please input i:");
scanf("%d",&i);
result=listdelete(p,i,&e);
if(result==ERROR)
printf("error:i out of rang!press enter continue");
else
printf("delete completed!please enter continue");
getch();
break;
case 5: printf("\n please input i:\n");
scanf("%d,&i");
result=getelem(p,i,&e);
if(result==ERROR)
printf("error:i out of rang!press enter continue");
else
printf("completed:%d",e);
getch();
break;
case 6: printf("bye\n");
getch();
exit(0);
}
}while(1);
}
#include<string.h>
#include<stdlib.h>
#define TRUE 1
#define FALSE 0
#define OK 1
#define ERROR 0
#define INFEASIBLE -1
#define OVERFLOW -2
typedef int status;
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct
{
int *elem;
int length;
int listsize;
}sqlist;
int flag=0;
status initlist(sqlist *l)
{
l->elem=(int*)malloc(LIST_INIT_SIZE*sizeof(int));
if(!l->elem)exit(OVERFLOW);
l->length=0;
l->listsize=LIST_INIT_SIZE;
return OK;
}
status listinsert(sqlist *l,int i,int e)
{
int *newbase,*q,*p;
if(i<1||i>l->length+1)return ERROR;
if(l->length>=l->listsize)
{
newbase=(int*)realloc(l->elem,(l->listsize+LISTINCREMENT)*sizeof(int));
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;
}
void listprint(sqlist *l)
{
int i;
for(i=0;i<l->length;i++)
{
printf("%-5d",l->elem[i]);
}
}
status listdelete(sqlist *l,int i,int *e)
{
int *p,*q;
if((i<1)||(i>l->length))return ERROR;
p=&(l->elem[i-1]);
e=*p;
q=l->elem+l->length-1;
for(++p;p<=q;++p)*(p-1)=*p;
--l->length;
return OK;
}
status getelem(sqlist *l,int i,int *e)
{
if((i<1)||(i>l->length))return ERROR;
*e=l->elem[i-1];
return OK;
}
int meun()
{
int a;
printf("*************************\n");
printf("* 1 InitList *\n");
printf("* 2 ListInsert *\n");
printf("* 3 ListPrint *\n");
printf("* 4 Delete *\n");
printf("* 5 Getelem *\n");
printf("* 6 Exit *\n");
printf("*************************\n");
fflush(stdin);
do
{
printf("qing xuan ze:\n");
scanf("%d",&a);
}while(!(a>=1&&a<=6));
return a;
}
void main()
{
sqlist l,*p;
int x,i,e,result;
p=&l;
do
{ clrscr();
x=meun();
switch(x)
{
case 1: initlist(p);
flag=1;
printf("initlist succes!press enter contiue");
getch();
break;
case 2: if(flag==0)
{
printf("you must initlist first!please select!");
getch();
break;
}
fflush(stdin);
printf("\n please input i and e:");
scanf("%d%d",&i,&e);
result=listinsert(p,i,e);
if(result==ERROR)
printf("error:i out of rang!press enter continue");
else
printf("insert completed!please enter continue");
getch();
break;
case 3: printf("sqlist:\n");
listprint(p);
getch();
break;
case 4: printf("\n please input i:");
scanf("%d",&i);
result=listdelete(p,i,&e);
if(result==ERROR)
printf("error:i out of rang!press enter continue");
else
printf("delete completed!please enter continue");
getch();
break;
case 5: printf("\n please input i:\n");
scanf("%d,&i");
result=getelem(p,i,&e);
if(result==ERROR)
printf("error:i out of rang!press enter continue");
else
printf("completed:%d",e);
getch();
break;
case 6: printf("bye\n");
getch();
exit(0);
}
}while(1);
}
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?

2024-09-02 广告
Play Video 七鑫易维是致力于机器视觉和人工智能领域的高新科技企业,迄今已专注眼球追踪技术的研发、创新与应用超过14年,拥有完全自主知识产权,全球专利总量500余项。 作为眼球追踪技术领域的全球知名品牌,七鑫易维的产品体系覆盖眼动分...
点击进入详情页
本回答由七鑫易维信息技术提供
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询