数据结构顺序表的操作,窗口界面(c语言版)

cpp 复制代码
// 准备头文件
#include <stdio.h>
#include <stdlib.h>
 
#define InitSize 10     // 动态顺序表的初始默认长度
 
// 定义C语言的bool变量
#define bool char
#define true 1
#define false 0
 
/* 定义数据元素的数据类型 */
typedef int ElemType; // 方便更改
 
// 动态顺序表的结构体定义
typedef struct Sqlist_d
{
	ElemType *data;
	int length;
	int maxsize;
}Sqlist_d;
 
// 生成顺序表
Sqlist_d L2; 
// 动态顺序表的初始化
bool InitSqList_d(Sqlist_d *L)
{
	L->length = 0;
	L->maxsize = InitSize;
	// 为数据开辟空间
	L->data = (ElemType *)malloc(sizeof(ElemType) * InitSize);
 
	return true;
}
 
// 动态顺序表的插入
bool SqList_dInsert(Sqlist_d *L,int i,ElemType e)
{
	// 判断操作是否合法
	if(i < 1 || i > L->length + 1)
	{
		printf("插入位置不合法!\n");
		return false;
	}
	if(L->length >= L->maxsize)
	{
		printf("这个表已经满了。\n");
		return false;
	}
	// 将第i位元素及其后面的元素向后移一位
	int j; // length的长度刚好是当前最大下标加一
	for(j = L->length;j >= i;j--)
	{
		L->data[j] = L->data[j-1];
	}
	// 将新元素放到插入的位置
	L->data[i-1] = e;
	// 表长加1
	L->length++;
	// 插入成功返回true
	return true;
}
 

// 将顺序表中第i位元素删除并把它返回给e
// 动态顺序表的元素删除
bool SqList_dElemDelete(Sqlist_d *L, int i, ElemType *e)
{
	// 判断合法性
	if(i < 1 || i > L->length)
	{
		printf("删除位置不合法!\n");
		return false;
	}
	// 判空
	if(L->length == 0)
	{
		printf("这个表是空的!\n");
		return false;
	}
	// 将删除元素赋值给e
	*e = L->data[i-1];
	// 将第i位元素之后的元素向前移动一位
	int j; // 此时i若作为下标就是删除元素后一位的下标
	for(j = i; j < L->length; j++)
	{
		L->data[j-1] = L->data[j];
	}
	// 表长减一
	L->length--;
	return true;
 
}
 
// 动态顺序表的按值查找并返回其位序
int SqList_dLocElem(Sqlist_d L, ElemType e)
{
	int i;
	for(i = 0; i < L.length; i++)
	{
		if(L.data[i] == e)
		{
			return i + 1;
		}
	}
	return 0;
}
 
// 动态顺序表的扩容
bool IncreaseSize(Sqlist_d *L, int len)
{
	// 生成一个新指针指向原来数据的空间
	ElemType *p = L->data;
	// 开辟更大的空间
	L->data = (ElemType *)malloc(sizeof(ElemType) * (L->length + len));
	// 转移数据
	int i;
	for(i = 0; i < L->length; i++)
	{
		L->data[i] = p[i]; // p[i] === *p + i
	}
	// 修改最大长度
	L->maxsize += len;
	// 释放原来的空间
	free(p);
	return true;
}
 
// 动态顺序表的输出
bool Sqlist_dprint(Sqlist_d L)
{
	// 判空
	if(L.length == 0)
	{
		printf("这个顺序表为空!\n");
		return false;
	}
	// 输出
	printf("Sqlist_d;");
	int i;
	for(i = 0; i < L.length; i++)
	{
		printf("%d-->", L.data[i]);
	}
	printf("end\n");
 
	return true;
}
// 按位取值
bool SqList_dLoc(Sqlist_d *L, int i)
{
	if (i >= 1 && i <= L -> length)
	{
		printf("查找成功\n");
		printf("第%d位元素的信息是:%d\n", i, L -> data[i-1]);
		return true;
	}
	printf("查找失败!\n");
	return false;
}
void Begin(){
	printf("1.建立\n");
	printf("2.输入\n");
	printf("3.取值\n");
	printf("4.查找\n");
	printf("5.插入\n");
	printf("6.删除\n");
	printf("7.输出\n");
	printf("8.退出\n");
	int n;
	int flag = 1;
	while (flag)
		{
			printf("请选择:");
			scanf("%d", &n);
	        int m,m1;
	        int d,d1,d2,d3;
	        char s,j;
	        
    	switch (n){
			case 1:
				InitSqList_d(&L2);
				printf("成功建立顺序表!\n");
				break;
			case 2:

				printf("您希望输入几个元素:\n");
				scanf("%d", &m);
				printf("输入您的%d个元素,以创建顺序表。\n", m);
				int i;
				int s1;
				for(i = 0; i < m; i++)
				{
					printf("请输入第%d个元素:", i+1);
					scanf("%d", &s1);
					SqList_dInsert(&L2, i+1, s1);
				}
				break;
			case 3:
				printf("请输入一个位置来取值:");

				scanf("%d", &d);
				SqList_dLoc(&L2, d);
				break;
			case 4:
				printf("请输入一个值来查找它的位置:");
				scanf("%d", &d1);
				printf("%d的位置是:%d\n",d1,SqList_dLocElem(L2, d1));
				break;
			case 5:
				printf("请输入要插入的位置:");
				scanf("%d", &d2);
				printf("请输入要插入的值:");

				scanf("%d", &m1);
				j = SqList_dInsert(&L2, d2, m1);
				if (j)
					{
						printf("插入成功!\n");
					}
				break;
			case 6:
				printf("请输入你要删除的位置:");
				scanf("%d", &d3);
				ElemType c;
				s = SqList_dElemDelete(&L2, d3, &c);
				if (s)
				{
					printf("删除成功!\n");
				} 
				break;
			case 7:
				Sqlist_dprint(L2);
				break;
			case 8:
				flag = 0;
			
			 
			
	}
		}

	
}
 
int main()
{

    Begin();
 
	return 0;
}

效果:

代码供参考,若有错误希望指出

相关推荐
AI街潜水的八角4 分钟前
基于C++的决策树C4.5机器学习算法(不调包)
c++·算法·决策树·机器学习
白榆maple29 分钟前
(蓝桥杯C/C++)——基础算法(下)
算法
JSU_曾是此间年少34 分钟前
数据结构——线性表与链表
数据结构·c++·算法
sjsjs1140 分钟前
【数据结构-合法括号字符串】【hard】【拼多多面试题】力扣32. 最长有效括号
数据结构·leetcode
朱一头zcy1 小时前
C语言复习第9章 字符串/字符/内存函数
c语言
此生只爱蛋1 小时前
【手撕排序2】快速排序
c语言·c++·算法·排序算法
blammmp2 小时前
Java:数据结构-枚举
java·开发语言·数据结构
何曾参静谧2 小时前
「C/C++」C/C++ 指针篇 之 指针运算
c语言·开发语言·c++
昂子的博客2 小时前
基础数据结构——队列(链表实现)
数据结构
咕咕吖2 小时前
对称二叉树(力扣101)
算法·leetcode·职场和发展