数据结构顺序表

数据结构实验顺序表,功能创建顺序表,查找顺序元素,删除顺序表元素,再插入顺序表元素

#include <stdio.h>
#include <iostream>
#define MAX 1000					//最多存放1000个数据,如果不够可以修改 

using namespace std;
//函数声明 
void showMenu();					//显示菜单 
int creat (struct group *g1);		//创造顺序表 
void print(struct group *g1); 		//显示顺序表 
void length(struct group *g1);		//输出顺序表的表长 
void find(struct group *g1);		//查找数据,函数里面选择按值查找还是按地址查找 
void insert(struct group *g1);		//插入数据 
void del(struct group *g1);			//删除数据,函数里面选择是按地址删除还是按值删除 



struct group						//结构体 
{
	int date[MAX];
	int last;						//记录存放几个数据 
};





int main()
{
	int select = 0;
	struct group g1;							//定义一个存放数据的顺序表 
	while (1)
	{	
		showMenu();								//显示菜单 
		cout<<"请输入选项"<<endl;
		cin >> select;
		
		switch (select)
		{
		case 1:   								//存放数据到顺序表里面 
			creat(&g1);
			break;
		
		case 2:  								//输出顺序表 
			print(&g1);
			break;
		case 3:  								//输出顺序表的表长 
			length(&g1); 
			break;
			
		case 4: 								//查找数据 
			find(&g1);
			break; 
		case 5:  								//插入数据 
			insert(&g1);
			break;
		case 6:  								//删除数据 
			del(&g1);
			break;
		case 0:  								//退出
			cout << "欢迎下次使用" << endl;
			system("pause");
			return 0;
		default:
			break;
		}
		system("pause");
		system("cls");				//清空输入的内容   清除上次操作的内容,重新显示菜单,便于操作 
	}
	return 0;
	
}


void showMenu()				//菜单,采用c++ 
{
	cout << "****************************" << endl;
	cout << "*****  1、建立顺序表   *****" << endl;
	cout << "*****  2、输出顺序表   *****" << endl;
	cout << "*****  3、顺序表表长   *****" << endl;
	cout << "*****  4、查找数据     *****" << endl;
	cout << "*****  5、插入数据     *****" << endl;
	cout << "*****  6、删除数据     *****" << endl;
	cout << "*****  0、退出         *****" << endl;
	cout << "****************************" << endl;
}



int creat (struct group *g1)			
{
	printf("请输入你想要存放几个数据\n");
	int a,i;
	scanf("%d",&a);
	g1->last=a;			//表示存放了 a个数据 
	for(i=0;i<a;i++)
	{
		printf("请第%d个数据",i+1);
		scanf("%d",&g1->date[i]);
	}
	for(i=0;i<a;i++)
	{
		printf("  %d  ",g1->date[i]);
		
	}
	printf("\n");
	printf("存放完毕\n");
	 
	return 0;
	
}   //creat函数结束 


void print(struct group *g1)
{
	if(g1->last==0)						//顺序表未存放数据情况 
	{
		printf("该顺序表未存放数据");
		return; 
	}
	else								//顺序表存放数据情况 
	{
		printf("该顺序表的数据有\n");
		int i;
		for(i=0;i<g1->last;i++)
		{
			printf(" %5d ",g1->date[i]);
		}
		printf("\n");
	
		return;
	}
	
}

void length(struct group *g1)
{
	printf("该表表长为%4d\n",g1->last);			//直接输出表长 
}


void find(struct group *g1)
{
	int select;
	printf("1.按值查找\n");
	printf("2.按地址查找\n");
	scanf("%d",&select);
	switch(select)
	{
		case 1:
			{
				printf("请输入你要查找的数值\n");
				int date,i=0;
				scanf("%d",&date);
				while(date!=g1->date[i]&&i<g1->last)			//寻找数据的位置 
				{
					i++;
				}
				if(date==g1->date[i])
				{
					printf("已查到%d,它是第%d个元素\n",date,i+1);
					 
				}
				else
				{
					printf("查无数据,请检查输入\n");
				}
				
				
			}
			break;
		case 2:
			{
				printf("请输入你要查找第几个数据\n");
				int date;
				scanf("%d",&date);
				if(date>0 && date<g1->last)
					printf("该数据为%4d\n",g1->date[date-1]);
				else
					printf("输入有误,请重新输入\n");
				
			}
			break;
		default:
			printf("输入有误\n"); 
		
			
	}
}

void del(struct group *g1)
{
	if(g1->last==0)								//顺序表无数据 情况 
	{
		printf("顺序表未存放数据\n");
	}
	
	
	int select;
	printf("1.按地址删除\n");
	printf("2.按值删除\n");
	scanf("%d",&select);
	switch(select)
	{
		case 1:
			{
				printf("请输入你要删除第几个数据\n");
				int date;
				scanf("%d",&date);
				if(date<1||date>g1->last)			//想删除的数据未定义或位置不对 
				{
					printf("输入有误,请重新输入\n");
					
				}
				int i;
				for(i=date-1;i<g1->last-1;i++)			//从删除位开始从前往后前移 
				{
					g1->date[i]=g1->date[i+1];
					
				}
					g1->last--;
					printf("已删除该数据\n");
			
			}
			break;
		case 2:
			{
					printf("请输入你要删除数据的值\n");
				int date;
				scanf("%d",&date);
				int i=0,j;
				while(date!=g1->date[i]&&i<g1->last)		//查找要删除的数据 
				{
					i++;
				}
				
				if(date==g1->date[i])
				{
					for(j=i;j<g1->last;j++)				//从删除位开始从前往后前移
					{
						g1->date[j]=g1->date[j+1];
					
					}
						g1->last--;
						printf("已删除该数据\n");
				}
				else
				{
					printf("输出有误,未找到该数据\n");
				}
			}
		
			break;
		default:
			printf("输出有误\n");
	}
}

void insert(struct group *g1)
{
	printf("请输出你要插在第几位\n");
	int date,i;
	cin>>date;
	if(date<1||date>MAX||date>g1->last+1)
	{
		printf("输入有误,请重新输入\n");
	}
	for(i=g1->last-1;i>date-2;i--)
	{
		g1->date[i+1]=g1->date[i];
	}
	printf("请输入你要在第%d位插入的数据:",date);
	int a;
	cin>>a;
	g1->date[date-1]=a;
	
	g1->last++;
	printf("已插入该数据\n");
	
}


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值