0
点赞
收藏
分享

微信扫一扫

函数版 c语言实现顺序表的创建、插入和删除

西曲风 2022-03-31 阅读 37
#include<stdio.h>
#include<stdlib.h>
#define LISTSIZE 10//顺序表存储空间的初始分配量
#define LISTINCREMENT 5//顺序表分配空间的分配增量

typedef struct{
int *elem;
int length;
int listsize;
}Sqlist;

int main(){
     Sqlist l;
     int i,e,m;
	 void initlist(Sqlist *l);
	 void showlist(Sqlist *l);
	 int listinsert(Sqlist *l,int i,int e);
	 int listdelete(Sqlist *l,int i);

     initlist(&l);
	 for(i=0;i<l.listsize;i++){ l.elem[i]=i+1;l.length++;}
     showlist(&l);		 
	 scanf("%d,%d",&i,&e);
     listinsert(&l,i,e);

	 printf("\ninsert:");
     for(m=0;m<l.length;m++) printf("%d,",l.elem[m]);
     printf("\n");

	 scanf("%d",&i);
	 listdelete(&l,i);
	 printf("\nDeleted element:e=%d\n",e);
}

//初始化顺序表
void initlist(Sqlist *l){
	l->elem=(int *)malloc(LISTSIZE*sizeof(int));
    if(l->elem) {
	l->length=0; 
	l->listsize=LISTSIZE;}
	else printf("ERROR!内存分配失败\n");
}

//输出顺序表
void showlist(Sqlist *l){
	 int m;
     printf("sqlist:");
     for(m=0;m<l->length;m++) printf("%d,",l->elem[m]);
     printf("\n");
}

//顺序表的插入
int listinsert(Sqlist *l,int i,int e){
int *p,*q,*newbase;
printf("\n在第%d个位置上,插入元素e=%d\n",i,e);
if(i<0||i>l->length+1) {printf("i值不合法!\n"); return -1;}
if(l->length>=l->listsize) {
newbase=(int *)realloc(l->elem,(l->listsize+LISTINCREMENT)*sizeof(int));
if(newbase){  l->elem=newbase;
l->listsize+=LISTINCREMENT; }
q=l->elem+i-1;
for( p=l->elem+l->length-1;
q<=p;p--) *(p+1)=*p;
*q=e;
l->length++;
}
else printf("ERROR!分配内存失败\n");
}

//顺序表的删除
int listdelete(Sqlist *l,int i){
	int m,e;
	int *q,*p;
    printf("\n删除第%d个位置上的元素\n",i);
    if(i<0||i>l->length+1) { printf("i值不合法!/n"); return -1;}
    p=l->elem+i-1;
	e=*p;
    for(q=l->elem+l->length-1;q>=p;p++) *p=*(p+1);
    l->length--;
    printf("\ndelete:");
    for(m=0;m<l->length;m++) printf("%d,",l->elem[m]);
    printf("\n");
	return e;	
}
举报

相关推荐

0 条评论