顺序表(C语言实现)

包含了一些简单的功能,初学者,希望大佬们给点建议。

#include <stdio.h>
#include <stdlib.h>
#define error -1
#define ok 1
//声明顺序表的结构体类型 
typedef struct{
	int *date;
	int length;
	int size;
}Sqlist;
//判断表的情况 
int pd1(Sqlist L){
	if(L.size==0){
		printf("!!!空表!!!\n");
		system("pause");
		return error;
	}
	return ok;
}
//创建顺序表 
int create(Sqlist *L,int size){
	if(L->date==NULL){
		L->date=(int *)malloc(sizeof(int)*size);
		L->length=0;
		return ok;
	}
	else
		return error;
}
//在表尾追加元素 
int addend(Sqlist *L,int date){
	int i=L->length;
	L->date[i]=date;
	L->length++;
	printf("操作成功\n");
	return ok;
}
//删除某位置的元素
int delete1(Sqlist *L,int n){
	if(n==L->length)
		L->length--;
	else{
		for(int i=n;i<L->length;i++)
			L->date[i-1]=L->date[i];
		L->length--;
	}
	printf("操作成功\n");
	return ok;
}
//显示长度与元素 
int display(Sqlist L){
	printf("表长为:%d\n",L.length);
	printf("各元素为:");
	for(int i=0;i<L.length;i++)
		printf("%d ",L.date[i]);
	printf("\n");
	return ok;
}
//插入元素 
int insert(Sqlist *L,int n,int m){
	for(int i=L->length-1;i>=n-1;i--)
		L->date[i+1]=L->date[i];
	L->date[n-1]=m;
	L->length++;
	printf("操作成功\n");
	return ok;
}
//查找元素
int lookup(Sqlist L,int value){
	printf("元素为:%d\n",L.date[value-1]);
	return ok;
}
//修改元素 
int modify(Sqlist *L,int n,int m){
	L->date[n-1]=m;
	printf("操作成功\n");
	return ok;
}
//定位元素
int location(Sqlist L,int date){
	for(int i=0;i<L.length;i++)
		if(L.date[i]==date){
			printf("位置为:%d\n",i+1);
			return ok;
		}
	printf("无此元素\n");
	return ok; 
}
//清除表
int clear(Sqlist *L){
	L->length=0;
	L->size=0;
	free(L->date);
	L->date=NULL;
	printf("清除成功\n");
	return ok;
}
int main(){
    int op,jd,value,value1;
    Sqlist L;
    do{
    	system("cls");
    	printf("请选择操作;\n1.创建\n2.追加\n3.删除\n4.显示\n5.插入\n6.查找\n7.修改\n8.定位\n9.清除\n0.退出\n请选择;");
		scanf("%d",&op);
		switch(op){
		case 1:
			printf("请输入表的长度;");
			scanf("%d",&L.size);
			if(L.size<1){
				printf("!!!输入非法!!!");
				system("pause");
				break;
			}
			else{
				jd=create(&L,L.size);
				if(jd==ok)
					printf("创建成功\n");
				else
					printf("!!!已有表,创建失败!!!\n");
				system("pause");
				break;
			}
		case 2:
			if(pd1(L)==error)
				break; 
			else if(L.length==L.size){
				printf("!!!表满!!!\n");
				system("pause");
				break;
			}
			else{
				printf("请输入元素;");
				scanf("%d",&value1);
				jd=addend(&L,value1);
				system("pause");
				break;
			}
		case 3:
			if(pd1(L)==error)
				break;
			else{
				printf("请输入位置:");
				scanf("%d",&value);
				if(value<1||value>L.length){
					printf("!!!输入非法!!!");
					system("pause");
					break;
				}
				else{
					jd=delete1(&L,value);
					system("pause");
					break;
				}
			}
		case 4:
			if(pd1(L)==error)
				break;
			else{
				jd=display(L);
				system("pause");
				break;
			}
		case 5:
			if(pd1(L)==error)
				break;
			else if(L.length==L.size){
				printf("!!!表满!!!\n");
				system("pause");
				break;
			}
			else{
				printf("请输入位置:");
				scanf("%d",&value);
				if(value<1||value>L.length){
					printf("!!!输入非法!!!");
					system("pause");
					break;
				}
				else{
					printf("请输入元素:");
					scanf("%d",&value1);
					jd=insert(&L,value,value1);
					system("pause");
					break;
				}
			}
		case 6:
			if(pd1(L)==error)
				break;
			else{
				printf("请输入位置:");
				scanf("%d",&value);
				if(value<1||value>L.length){
					printf("!!!输入非法!!!");
					system("pause");
					break;
				}
				else{
					jd=lookup(L,value);
					system("pause");
					break;
				}
			}
		case 7:
			if(pd1(L)==error)
				break;
			else{
				printf("请输入位置:");
				scanf("%d",&value);
				if(value<1||value>L.length){
					printf("!!!输入非法!!!");
					system("pause");
					break;
				}
				else{
					printf("请输入元素:");
					scanf("%d",&value1);
					jd=modify(&L,value,value1);
					system("pause");
					break;
				}
			}
		case 8:
			if(pd1(L)==error)
				break;
			else{
				printf("请输入元素:");
				scanf("%d",&value1);
				jd=location(L,value1);
				system("pause");
				break;
			}
		case 9:
			if(pd1(L)==error)
				break;
			else{
				jd=clear(&L);
				system("pause");
				break;
			}
		case 0:
			printf("按下任意键退出系统"); 
			break;
		default:
			printf("输入错误\n");
			system("pause");
		}
	}while(op);
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值