list删除指定元素_利用C语言实现插入,删除,遍历……

  • 顺序表的类型定义和基本操作算法实现
#include <stdio.h>
#include <malloc.h>
#define listinitsize 100
#define	listincrement 10
#define ERROR 0
#define OK 1
typedef int Elemtype;
typedef int Status;
Elemtype newbase;

typedef struct{
	Elemtype *elem;
	int length;
	int listsize;
}sqlist;

//创建一个顺序表
Status Initlist(sqlist *L){
	L->elem=(Elemtype *)malloc(listinitsize*sizeof(Elemtype));
	if(!L->elem) return ERROR;
	else{
		L->length=0;
		L->listsize=listinitsize;
		return OK;
	}
}

//输入数据
Status Inputlist(sqlist *L){
	int i,e;
	printf("t输入数据的个数:");
	scanf("t%d",&i);
	while(L->length<i){
		printf("t输入第%d个数:",L->length+1);
		scanf("t%d",&e);
		L->elem[L->length]=e;
		L->length++;
	}
}

//判断顺序表是否为空
Status emptylist(sqlist L){
	if(L.length==0)
		return ERROR;
	else
		return OK;
}

//数据的输出
Status outlist(sqlist L){
	int i;
	if(emptylist(L)==1){
		for (i=0;i<L.length;i++)
			printf("t%d ",L.elem[i]);
		printf("n");
	}
	else{
		return ERROR;
	}
}

//顺序表元素的个数
Status lengthlist(sqlist L){
	return L.length;
}

//输出指定位置的元素
Status out_list(sqlist L,int i){
	if(emptylist(L)!=1)
		return ERROR;
	if(i>L.length+1 || i<1)
		return ERROR;
	printf("t第%d个的元素是:%dn",i,L.elem[i-1]);
}

//输出指定元素的位置
Status index_list(sqlist L,int i){
	int j;
	if(emptylist(L)!=1)
		return ERROR;
	for (j=0;j<L.length;j++){
		if(i==L.elem[j])
			printf("t数据 %d 的位置是:%dn",i,j+1);
	}
}

//插入指定位置和元素
Status insert_list(sqlist *L,int m,int n){
	int i;
	if(emptylist(*L)!=1)
		return ERROR;
	if(m>L->length+1 || m<0)
		return ERROR;
	if(L->length>=L->listsize){
		newbase=(Elemtype *)malloc(L->elem,L->listsize+listincrement*sizeof(Elemtype));
		if(!newbase)
			return ERROR;
		L->elem=newbase;
		L->listsize=L->listsize+listincrement;
	}
	for(i=L->length-1;i>=m-1;i--)
		L->elem[i+1]=L->elem[i];
	L->elem[i+1]=n;
	L->length++;
}

//删除指定位置的元素
Status delete_list(sqlist *L,int i){
	int j;
	if(emptylist(*L)!=1)
		return ERROR;
	if(i>L->length|| i<0)
		return ERROR;
	for(j=i-1;j<=L->length;j++){
		L->elem[j]=L->elem[j+1];
	}
	L->length--;
}

//销毁顺序表
Status deletelist(sqlist *L){
	free(L->elem);
	L->elem=NULL;
	return OK;
	}
int main(){
	sqlist l;
	int index,k,data;
	do{
		printf("n");
		printf("t************************************n");
		printf("tt1.创建一个顺序表n");
		printf("tt2.输入数据n");
		printf("tt3.顺序表是否为空n");
		printf("tt4.数据的输出n");
		printf("tt5.顺序表元素的个数n");
		printf("tt6.输出指定位置的元素n");
		printf("tt7.输出指定元素的位置n");
		printf("tt8.插入指定位置和元素n");
		printf("tt9.删除指定位置的元素n");
		printf("tt0.销毁顺序表n");
		printf("t************************************n");
		printf("t请输入序号:");
		scanf("%d",&k);
		switch(k){
		case 0:{//销毁顺序表
				if(deletelist(&l)==1)
					printf("tyesn");
			   };break;
		case 1:{//创建一个顺序表
				if(Initlist(&l)==1)
					printf("tokn");
				else
					printf("tonn");
			   };break;
		case 2:{//输入数据
				Inputlist(&l);
			   };break;
		case 3:{//顺序表是否为空
				if(emptylist(l)==0)
					printf("t空n");
				else
					printf("t非空n");
				};break;
		case 4:{//数据的输出
				if(outlist(l)==0)
					printf("t空n");
			   };break;
		case 5:{//顺序表元素的个数
				printf("t元素个数:%dn",lengthlist(l));
			   };break;
		case 6:{//输出指定位置的元素
				printf("t输出第几个数据:");
				scanf("t%d",&index);
				if(out_list(l,index)==0)
					printf("t空n");
			   };break;
		case 7:{//输出指定元素的位置
				printf("t输入数据:");
				scanf("t%d",&data);
				if(index_list(l,data)==0)
					printf("t空n");
			   };break;
		case 8:{//插入指定位置和元素
				printf("t输入数据:");
				scanf("t%d",&data);
				printf("t输入位置:");
				scanf("t%d",&index);
				if(insert_list(&l,index,data)==0)
					printf("t空n");
			   };break;
		case 9:{//删除指定位置的元素
				printf("t删除的位置:");
				scanf("t%d",&index);
				if(delete_list(&l,index)==0)
					printf("t空n");	
			   };break;
		default :printf("t without n");
		}
	}while(1);
}

39dcb40bccca02d26966a43794e0cea5.png
界面的样式
  • 顺序表的基本操作
  • 初始化线性表 InitList(&L)
  • 该运算的结果是构造一个空的线性表 L,为线性表分配存储空间用于存放数 据元素。
  • 销毁线性表 DestroyList(&L )
  • 该运算的结果是释放线性表 L 占用的内存空间。
  • 判定是否为空表 ListEmpty(L)
  • 该运算返回一个值表示 L 是否为空表。若 L 为空表,则返回 1,否则返回 0。
  • 求线性表的长度 ListLength(L)
  • 该运算返回顺序表 L 的长度。实际上只需返回 length 成员的值即可。
  • PriorElem( L, cur_e, &pre_e )
  • 该运算返回给定数据元素的前驱数据元素的值。
  • NextElem( L, cur_e, &next_e )
  • 该运算返回给定数据元素的后继数据元素的值。
  • 输出线性表 DispList(L)
  • 该运算当线性表 L 不为空时,顺序输出 L 中各数据元素的值。
  • 求某个数据元素值 GetElem(L,i,&e)
  • 该运算返回 L 中第 i(1≤i≤ListLength(L))个元素的值,存放在 e 中。
  • 按元素值查找 LocateElem(L,e)
  • 该运算顺序查找第 1 个值域与 e 相等的数据元素的序号。若这样的元素不存在, 则返回值为 0。
  • 插入数据元素 ListInsert(&L,i,e)
  • 该运算在顺序表 L 的第 i 个位置(1≤i≤ListLength(L)+1)上插入新的元素 e。
  • 删除数据元素 ListDelete(&L,i,&e)
  • 该运算删除顺序表 L 的第 i(1≤i≤ListLength(L))个元素。
  • 清空线性表 ClearList( &L )
  • 删除线性表 L 中的所有数据元素,但不释放已分配给线性表的存储空间。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值