性线表----顺序表的基本操作

#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
#define MAX 100
/**
 *@Name:线性表--顺序表
 *@Description:顺序表的创建、初始化、遍历、元素的插入、删除和修改和移动。 
 *@Author:Freedoman
 *@Date: 2014-8-5
 */ 

struct SeqList    //顺序表类型
{
	int index;            //当前元素下标 
	int element[MAX];    //顺序表元素
};
typedef struct SeqList * PSeqList;

/*函数声明*/
PSeqList createNullSeqList();
int isNullSeqList(PSeqList curSeqList);
void initSeqList(PSeqList curSeqList);
int findIndexByElement(PSeqList curSeqList);
int findElementByIndex(PSeqList curSeqList);
int insertEleBeforeIndex(PSeqList curSeqList);
int insertEleAfterIndex(PSeqList curSeqList);
int deleteElementByIndex(PSeqList curSeqList);
int deleteElement(PSeqList curSeqList);
void printSeqList(PSeqList curSeqList);


/*-----------创建固定容量空顺序表------------*/ 
PSeqList createNullSeqList(){
	printf("创建固定容量空顺序表\n"); 
	PSeqList curSeqList=(PSeqList)malloc(sizeof(SeqList));
	if(curSeqList != NULL){
		curSeqList->index = -1;
		printf("创建成功!\n");
	}else{
		free(curSeqList);
		printf("创建失败!\n");
	}
	return curSeqList;
}

/*---------------判断顺序表是否为空------------*/
int isNullSeqList(PSeqList curSeqList){
	if(curSeqList->index == -1){
		printf("当前顺序表为空!\n");
		return 1;
	}
	else{
		printf("当前顺序表不为空!\n");
		return 0;
	}
}

/*-------------初始化顺序表-----------------*/
void initSeqList(PSeqList curSeqList){
	printf("初始化顺序表\n");
	int i = 0,x;
	if(isNullSeqList(curSeqList)){
		
		while(i < MAX){
			printf("请输入元素>>>");
			scanf("%d",&x);
			if(x != -1){
				curSeqList->element[i] = x;
				curSeqList->index = i;
				i++; 
			}else{
				break;
			}
		}
		printf("顺序表初始化成功\n");
		printSeqList(curSeqList);
	}
	else{
		printf("不能进行初始化\n");
	}
}

/*---------------求元素的下标----------------*/
int findIndexByElement(PSeqList curSeqList) {
	printf("求元素的下标\n");
	int x;
	printf("请输入元素>>>");
	scanf("%d",&x);
	for(int i=0; i <= curSeqList->index; i++){	

		if(x == curSeqList->element[i]){
			printf("元素%d的下标为>>>>%d\n",x,i);
			return i;
		}
	}
	printf("没有找到指定元素\n");
	return -1;
}

/*---------------求指定下标的元素--------------*/
int findElementByIndex(PSeqList curSeqList){
	int index;
	printf("请指定下标>>>");
	scanf("%d",&index);
	for(int i=0; i <= curSeqList->index; i++)
		if(i == index){
			printf("下标%d的元素为>>>>%d\n",index,curSeqList->element[i]);
			return i;
		}
	printf("下标越界!\n",index);
	return -1;
}

/*-----------在指定下标之前插入元素---------*/
int insertEleBeforeIndex(PSeqList curSeqList){
	printf("在指定下标之前插入元素\n"); 
	int i,index,x;
	printf("请指定下标>>>");
	scanf("%d",&index);
	printf("请输入元素>>>");
	scanf("%d",&x);
	
	if(index >= 0 && index <= curSeqList->index){
		// 从后往前依次移动元素element[n+1] = element[n]; 
		for(i=curSeqList->index	+1; i > index; i--){
			curSeqList->element[i]=curSeqList->element[i-1];
		}
			
		curSeqList->element[index]=x;
		curSeqList->index += 1;
		printf("插入成功!\n");
		printSeqList(curSeqList);
		return 1;
	}
	printf("下标越界!\n");
	return 0;
}

/*---------在指定下标之后插入元素---------*/ 
int insertEleAfterIndex(PSeqList curSeqList){
	printf("在指定下标之后插入元素\n");
	int i,index,x;
	printf("请指定下标>>>");
	scanf("%d",&index);
	printf("请输入元素>>>");
	scanf("%d",&x);
	
	if(index >= 0 && index <= curSeqList->index)
	{
		// 从后往前移动ele[n+1]=ele[n]直到index处 
		for( i = curSeqList->index+1; i > index+1; i--){
			curSeqList->element[i]=curSeqList->element[i-1];
		}	
		curSeqList->element[index+1]=x;
		curSeqList->index+=1;
		printf("插入成功!\n");
		printSeqList(curSeqList);
		return 1;
	}
	printf("下标越界!\n");
	return 0;
}

/*------------删除指定下标元素-------------*/
int deleteElementByIndex(PSeqList curSeqList){
	printf("删除指定下标元素\n");
	int i,index;
	printf("请指定下标>>>");
	scanf("%d",&index);
	
	if(index >= 0 && index <= curSeqList->index	){
		// 元素从删除的下标处起依次向前移动 
		for(i = index; i < curSeqList->index; i++){
			curSeqList->element[i] = curSeqList->element[i+1];
		}	
		curSeqList->index -= 1;
		printf("删除成功!\n");
		printSeqList(curSeqList);
		return 1;
	}
	printf("下标越界!\n");
	return 0;
}

/*--------------删除指定元素---------------------*/
int deleteElement(PSeqList curSeqList){
	printf("删除指定元素\n"); 
	int i,j,x;
	printf("请输入元素>>>");
	scanf("%d",&x);
	// 先从头开始搜索元素,定位下标 
	for(i=0; i<curSeqList->index	; i++){
		if(curSeqList->element[i] == x)
		{
			// 从下标处开始依次向前移动  
			for(j=i; j<curSeqList->index; j++)
				curSeqList->element[j]=curSeqList->element[j+1];
			curSeqList->index -= 1;
			printf("删除成功!\n");
			printSeqList(curSeqList);
			return 1;
		}
	}
	printf("未找到!\n");
	return 0;
}

/*------------打印当前顺序表-------------------*/
void printSeqList(PSeqList curSeqList){
	if(curSeqList != NULL){
		printf("打印[");
		for(int i=0; i<= curSeqList->index; i++){
			printf(" %d ",curSeqList->element[i]);
		}
		printf("]\n");	
	}else{
		printf("ERROR"); 
	}
}

/*----------------------主控-----------------------*/
int main()
{
	int input;
	PSeqList curSeqList = NULL;
	printf("\n\n--------顺序表的基本操作---------\n\n");
	
	while(1){
		printf("\n 1_创建固定容量空顺序表\n 2_判断当前顺序表是否为空\n 3_初始化顺序表\n");
		printf(" 4_求元素的下标\n 5_求指定下标的元素\n");
		printf(" 6_在指定下标之前插入元素\n 7_在指定下标之后插入元素\n");
		printf(" 8_删除指定下标元素\n 9_删除指定元素\n 10_打印当前顺序表\n\n");
		
		printf("\n请选择>>>"); 
		scanf("%d",&input);
		switch(input){
			case 1 : curSeqList = createNullSeqList();break;
			case 2 : isNullSeqList(curSeqList);break;
			case 3 : initSeqList(curSeqList);break;
			case 4 : findIndexByElement(curSeqList);break;
			case 5 : findElementByIndex(curSeqList);break;
			case 6 : insertEleBeforeIndex(curSeqList);break;
			case 7 : insertEleAfterIndex(curSeqList);break;
			case 8 : deleteElementByIndex(curSeqList);break;
			case 9 : deleteElement(curSeqList);break;
			case 10: printSeqList(curSeqList);break;
			default: printf("输入错误,请重新输入"); break;
		}
	}
	return 0;
}

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值