顺序表基本运算的实现

  • Post author:
  • Post category:其他


#include<stdio.h>
#define MAXLEN 100
typedef struct{
	int data[MAXLEN];
	int length;
}SeqList;
//顺序表的初始化
void InitList(SeqList* L){
	L->length = 0;
} 
//顺序表的建立
void createSeqList(SeqList* L){
	int i,n;
	printf("请输入您要初始化的数值的个数");
	scanf("%d",&n);
	for(i = 0;i < n;i++){
		scanf("%d",&L->data[i]);
	} 
	L->length = n;
} 
//顺序表的查找1.按位置
int getElem(SeqList* L,int i){
	if(i < 1||i > L->length)
	return 0;
	else
	return L->data[i - 1];
}
//顺序表的查找2.按值
int locate(SeqList* L,int n){
	int i = 0;
	while(L->data[i]!=n&&i<L->length)
	i++;
	if(i>=L->length)
	return 0;
	else
	return i + 1;
} 
//插入操作 
int InPut(SeqList* L,int i,int x){
	int j;
	if(L->length>=MAXLEN){
		printf("已满!");
		return -1; 
	}
	if(i <1||i>L->length+1){
		printf("位置有错");
		return 0;
	}
	if(i==L->length+1){
		L->data[i-1]=x;
		L->length++;
		return 1;
	}
	for(j = L->length - 1;j >= i - 1;j--){
		L->data[j+1] = L->data[j];  
	}
	L->data[i - 1] = x;
	L->length++;
	return 1;
}
//删除操作
int OutPut(SeqList* L,int i){
	int j;
	if(i <1||i>L->length+1){
		printf("位置有错");
		return 0;
	}
	for(j = i - 1;j < L->length - 1;j++){
		L->data[j] = L->data[j + 1];
	} 
	L->length--;
	return 1;
} 
//输出表内元素
void PrintSeq(SeqList* L){
	int i;
	for(i = 0;i < L->length;i++)
		printf("%5d",L->data[i]);
} 
//菜单函数 
void Menu(){
	printf("\n                        顺序表的操作");
	printf("\n========================================================");
	printf("\n|                    1----建立顺序表                   |");
	printf("\n|                    2----插入元素                     |");
	printf("\n|                    3----删除元素                     |");
	printf("\n|                    4----按位置查找值                 |");
	printf("\n|                    5----按值查找位置                 |");
	printf("\n|                    6----求顺序表长度                 |");
	printf("\n|                    0----返回                         |");
	printf("\n========================================================");
	printf("\n请输入您需要的指令"); 
}
//主函数
int main(){
	SeqList L;
	InitList(&L);
	printf("================顺序表初始化完成=========================="); 
	char choice = 'y';
	int c,x,i;
	while(choice=='y'){
		Menu();
		scanf("%d",&c);
		switch(c){
			case 1:
				createSeqList(&L);
				PrintSeq(&L);
				break;
			case 2:
				printf("\n请输入您要插入的位置i:");
				scanf("%d",&i);
				printf("\n请输入您要插入的值x:");
				scanf("%d",&x);
				InPut(&L,i,x);
				PrintSeq(&L);
				break;
			case 3:
				printf("\n请输入您要删除的位置i:");
				scanf("%d",&i);
				OutPut(&L,i);
				PrintSeq(&L);
				break;
			case 4:
				printf("\n请输入您要查找的位置i:");
				scanf("%d",&i);
				printf("第%d个位置元素为%d",i,getElem(&L,i));
				break; 
			case 5:
				printf("\n请输入您要查找的值x:");
				scanf("%d",&x);
				printf("元素%d在第%d位",x,locate(&L,x));
				break;
			case 6:
				printf("\n长度为%d",L.length);
				break;
			case 0:
				choice ='0';
				break;	 
		}
	}
} 



版权声明:本文为Nutinsist原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。