扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
完整代码:
网站建设哪家好,找创新互联建站!专注于网页设计、网站建设、微信开发、成都小程序开发、集团企业网站建设等服务项目。为回馈新老客户创新互联还提供了钦州免费建站欢迎大家使用!
#include stdio.h
#include stdlib.h
#include windows.h
#define MAXSIZE 100
typedef int datatype;
typedef struct{
datatype a[MAXSIZE];
int size;
}sequence_list;
void init(sequence_list *slt)
{
slt-size=0;
}
void append(sequence_list *slt,datatype x)
{
if(slt-size==MAXSIZE)
{
printf("顺序表是满的");
exit(1);
}
slt-a[slt-size]=x;
slt-size=slt-size+1;
}
void display (sequence_list slt)
{
int i;
if(!slt.size)
printf("顺序表是空的");
else
for(i=0;islt.size;i++)
printf("%5d",slt.a[i]);
printf("\n");
}
int empty (sequence_list *slt)
{
memset(slt,0,sizeof(sequence_list));
return(slt-size==0?1:0);
}
int find (sequence_list slt,datatype x)
{
int i=0;
while(islt.size slt.a[i]!=x)
i++;
return(islt.size ? i:-1);
}
datatype get(sequence_list slt,int i)
{
if(i0||i=slt.size)
{
printf("\n指定位置的节点不存在");
exit(1);
}
else
return slt.a[i];
}
void insert(sequence_list *slt,datatype x,int position)
{
int i;
if(slt-size==MAXSIZE)
{
printf("\n顺序表是满的,无法插入");
exit(1);
}
if(position0||positionslt-size)
{
printf("\n指定的插入位置不存在");
exit(1);
}
for(i=slt-size;iposition;i--)
slt-a[i]=slt-a[i-1];
slt-a[position]=x;
slt-size++;
}
void dele(sequence_list *slt,int position)
{
int i;
if(slt-size==0)
{
printf("\n顺序表是空的,无法删除");
exit(1);
}
if(position0||position=slt-size)
{
printf("\n指定的删除位置不存在");
exit(1);
}
for(i=position;islt-size-1;i++)
slt-a[i]=slt-a[i+1];
slt-size--;
}
int main()
{
sequence_list slt;
bool exit_flag=false;
int fun_num=1;
datatype data=0;
int i=0;
printf("1.初始化 2.增加节点 3.显示 4.清空 5.查找\n6.获取节点 7.插入节点 8.删除节点 9.退出 0.清屏\n");
while (!exit_flag)
{
printf("请选择功能:\n");
scanf("%d",fun_num);
switch (fun_num)
{
case 1:
init(slt);
break;
case 2:
printf("请输入数据:\n");
scanf("%d",data);
append(slt,data);
break;
case 3:
display (slt);
break;
case 4:
empty (slt);
break;
case 5:
printf("请输入查找的数据:\n");
scanf("%d",data);
printf("查找到的数据位置为:%d",find (slt,data));
printf("\n");
break;
case 6:
printf("请输入数据位置:\n");
scanf("%d",i);
printf("该位置的数据为:%d",get(slt,i));
printf("\n");
break;
case 7:
printf("请输入插入节点位置:\n");
scanf("%d",i);
printf("请输入插入节点数据:\n");
scanf("%d",data);
insert(slt,data,i);
break;
case 8:
printf("请输入删除节点位置:\n");
scanf("%d",i);
dele(slt,i);
break;
case 9:
exit_flag=true;
break;
case 0:
system("CLS");
printf("1.初始化 2.增加节点 3.显示 4.清空 5.查找\n6.获取节点 7.插入节点 8.删除节点 9.退出 0.清屏\n");
break;
default:
break;
}
}
return 0;
}
效果如下图,调试通过,所有功能好使
SeqList L;//L只是个默认构造,在后面执行基本是统一的0值;执行前应该设置实体数据
L=Selection(L.length);//改为L=Selection(L);原函数调用与函数定义不符,有语法错误;L.length是个int 类型,函数定义的参数类型是SeqList;
SeqList Selection(SeqList L) 内部逻辑不够简捷,多多练习;
if (L.data[j]L.data [i]){}//可直接交换,k标志没什么作用。
再次修改完成,调试通过。
#include malloc.h
#include stdio.h
#define LIST_INIT_SIZE 100
#define LISTINCREMENT 10
typedef struct{
int *elem;
int length;
int listsize;
}Sqlist;
///////
Sqlist* InitSqlist() //链表初始化
{
Sqlist * L=NULL;
L=(Sqlist*)malloc(sizeof(Sqlist));//L只是个指针,要指向一个Sqlist.
L-elem=(int *)malloc(LIST_INIT_SIZE*sizeof(int));
L-length=0;
L-listsize=LIST_INIT_SIZE;
return L;
}
////
void DisplaySqlist(Sqlist* L2)
{
int i;
for(i=0;iL2-length;i++)//去掉-1,
{
printf("%d ",L2-elem[i]);
}
}
////////
Sqlist* List_Insert_Sq(Sqlist* L3,int i,int e)//链表的插入
{
int * newbase,*p,*q;
if(i1||iL3-length+1)return L3;
if(L3-length=L3-listsize)
{
newbase=(int*)realloc(L3-elem,(L3-listsize+LISTINCREMENT)*sizeof(int));
if(!L3-elem) return L3;
L3-elem=newbase;
L3-listsize+=LISTINCREMENT;
}
q=(L3-elem[i-1]);
for(p=(L3-elem[L3-length-1]);p=q;--p) *(p+1)=*p; //这里有问题,已经改正
*q=e;
++L3-length;
return L3;
}
////
Sqlist* List_Delete_Sq(Sqlist* L4,int i)
{
int *p,*q;
q=(L4-elem[i-1]);
for(p=q;L4-length-i;p++,i++) *p=*(p+1); //这里有问题,已经按我想法改了。因为这是个数组链表。用后一个数覆盖前一个数完成节点的删除。
--L4-length;
return L4;
}
///
void main()
{
Sqlist* L1;
Sqlist* i,e;
L1=InitSqlist();
L1=List_Insert_Sq(L1,1,1);
L1=List_Insert_Sq(L1,2,3);
L1=List_Insert_Sq(L1,3,5);
L1=List_Insert_Sq(L1,2,7);
L1=List_Delete_Sq(L1,2);
DisplaySqlist(L1);
}
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流