顺序表 (小学期实验内容)由于提前做 要求偏题,不做讲解,源码奉上


//头文件
#pragma once

#define OK 1
#define ERROR 0
#define MAXSIZE 100  //顺序表可能达到的最长长度
typedef int Status;  //Status 是函数的返回值类型,值是函数结果的状态代码
typedef int ElemType;//ElemType 可定义的数据类型

typedef struct{
	ElemType *elem;  //存储空间的基地址
	int length;  //顺序表长度
}SqList;
SqList L;

//欢迎界面
void welcomeInterface();
//创建顺序表 
Status createSqList(SqList &L);
//打印顺序表
void printSqList(SqList L);
//查找
Status findSqList(SqList L,int k);
//排序
void sortSqList(SqList L);
//折半查找
Status binSearch(SqList L,int k);


#include"SqList.h"
#include<Windows.h>
#include<stdio.h>

int main()
{
	while (1)
	{
		welcomeInterface();
	}
	return 0;
}
//欢迎界面
void welcomeInterface()
{
		system("cls");
		printf("-------------顺  序  表------------\n"); 
		printf("|        1.创 建 顺 序 表         |\n");
		printf("|        2.打 印 顺 序 表         |\n");
		printf("|        3.顺 序 表 查 找         |\n");
		printf("|        4.顺 序 表 排 序         |\n");
		printf("|        5.折  半  查  找         |\n");
		printf("|        0.退          出         |\n");
		printf("-----------------------------------\n");
		printf("请输入你的选择:");
		char ch;
		scanf("%c", &ch);
		switch (ch)
		{
		case '1':system("cls"); createSqList(L); break;
		case '2':system("cls"); printSqList(L); break;
		case '3': {system("cls");
			printf("请输入您要查找的元素:\n");
			int k; scanf("%d",&k);
			int n = findSqList(L, k);
			printf("%d\n", n);
			break; }
		case '4':system("cls"); sortSqList(L); break;
		case '5': {system("cls"); printf("请输入您要查找的元素:\n");
			int k; scanf("%d", &k);
			int n = binSearch(L, k);
			printf("%d\n", n); 
			break; }
		case '0':exit(ERROR);
		default:printf("输入有误,请重新输入\n"); Sleep(100); welcomeInterface(); break;
		}
		system("pause");
}
//创建顺序表
Status createSqList(SqList &L)
{
	L.elem = new ElemType[MAXSIZE]; //分配数组
	if (!L.elem)
		exit(ERROR);
	printf("初始化表中的元素个数:");
	int count=0;
	scanf("%d", &count);
	printf("请输入元素:");
	for (int i = 1; i <=count; i++) {
		scanf("%d", &L.elem[i]);
	}
	L.length = count;
	return OK;
}
//打印顺序表
void printSqList(SqList L)
{
	printf("顺序表如下:\n" );
	for (int i = 1; i <= L.length; i++)
		printf("%d ", L.elem[i]); 
	printf("\n");
}
//查找
Status findSqList(SqList L,int k) //查找某个位置的元素的值 如果找到则返回值
{
	for (int i = 1;i<=L.length; i++)
	{
		if (L.elem[i] == k)
			return i;
	}
	return -1;
}
//排序 (从小到大)  
void sortSqList(SqList L)
{
	int mid, j, flag;
                  
	mid = L.length - 1; flag = 1;         //flag用来标记某一趟排序是否发生交换
	while ((mid > 0) && (flag == 1))
	{
		flag = 0;                         //flag置为0,如果本趟排序没有发生交换,则不会执行下一趟排序

		for (j = 1; j <= mid; j++)
		{
			if (L.elem[j] > L.elem[j+1])
			{
				flag = 1;                   //flag置为1,表示本趟排序发生了交换
				int t = L.elem[j];L.elem[j] = L.elem[j+1];L.elem[j + 1]= t;   //交换前后两个记录
			}
		}
		--mid;
	}
}//折半查找
Status binSearch(SqList L,int k)
{
	int low = 1; 
	int high = L.length;
	int mid;
	while (low < high)
	{
		mid = (low + high) / 2;
		if (k==L.elem[mid])
		{
			return mid;
		}
		else if (k < L.elem[mid])
		{
			high = mid - 1;
		}
		else
		{
			low = mid + 1;
		}
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值