数据结构与算法之对于顺序表的增删查方法---代码含详细释义

菜单是对顺序表的操作顺序,是根据鲍老师的课程进行学习的

鲍松山icon-default.png?t=N7T8https://space.bilibili.com/579985088


目录

主程序main

 源文件cpp

 头文件h


主程序main

//源文件负责函数的实现
//源文件、主程序全要引入头文件 
#include"SeqList.h" 
//进行结构的实现 
void InitSeqList(SeqList *list) 
{
	//base capacity size
	//在C语言中malloc进行开辟空间 申请内存 
	//(元素类型)malloc(元素大小)* 表的大小  assert=考虑是否有内存
	//引入的函数需要在头文件中引用声明 
	list->base = (ElemType *)malloc(sizeof(ElemType) * SEQLIST_INIT_SIZE);
	assert(list->base != NULL);
	//assert(list->base != NULL);
	list->capacity = SEQLIST_INIT_SIZE;
	list->size = 0; 

}
//声明之后要在源文件进行 实现   尾部插入函数 
//前提要size<容量 
//x是指表的大小 1 2 3 ....
void push_back(SeqList *list,ElemType x) 
{
	if(list->size >= list->capacity )
	{
		printf("顺序表空间已满,不能尾部插入。\n");
		return ;
	}
	list->base[list->size] = x;     
	//size所在位置是下标,指针-->大小+1
	list->size++;
}

//头部插入    加入数据前要先判断表中空间是否还能加入数据,看内存 
void push_front(SeqList *list,ElemType x)
{	if(list->size >= list->capacity )
	{
		printf("顺序表空间已满,不能头部插入。\n");
		return ;
	}
	for(int i=list->size;i>0; --i)
	{
		list->base[i] = list->base[i-1];
	 } 
	list->base[0] = x;
	list->size++;
 } 



//进行显示顺序表 对函数的实现
void show_list(SeqList *list)
{
	for(int i=0; i< list->size; ++i)
	{
		printf("%d ",list->base[i]);
	 } 
	 printf("\n");
} 

//尾部删除  删除数据前应先判断表中是否有数据 
void pop_back(SeqList *list)
{
	if(list->size == 0)
	{
		printf("顺序表为空,不能尾部删除数据\n");
		return; 
	 } 
	 list->size--;
	
}

//头部删除
void pop_front(SeqList *list)
{
	if(list->size == 0)
	{
		printf("顺序表为空,不能头部删除数据\n");
		return; 
	 } 
	
	for(int i=0; i<list->size-1;++i)
	{
		list->base[i] = list->base[i+1];
	 } 
	 list->size--;
	 
 } 










源文件cpp

//主程序--调用/测试数据结构 
//源文件、主程序全要引入头文件 
#include"SeqList.h" 
//开始编写测试框架
int  main()
{
	SeqList mylist;
	//结构初始化-->头文件声明 
	InitSeqList(&mylist); 
	//对线性表的实现 创建抽象数据类型线性表ADT 
	int select = 1;
	ElemType Item;
	//元素定义,在头文件也要定义类型 
	//基本操作 :尾插 头插 显示顺序表 尾删 头删  
	//按位置插入 查找数据 求数据表长度 按位置删除 按值删除数据 
	//	插入删除<--   --->排序 、顺序表逆值  顺序表清除 顺序表摧毁 
	//0代表退出系统 
	
	while(select)
	{
		printf("*********************************\n");
		printf("* [1] push_back  [2] push_front *\n"); 
		printf("* [3] show_list  [4] pop_back   *\n");
		printf("* [5] pop_front  [6] insert_pos *\n"); 
		printf("* [7] find       [8] length     *\n");
		printf("* [9] delete_pos [10]delete_val *\n"); 
		printf("* [11] sort      [12] reverse   *\n"); 
		printf("* [13] clear     [14] destory   *\n"); 
		printf("* [0] quit_system               *\n");   
		printf("*********************************\n");
		printf("请选择:>");
		scanf("%d",&select);
		if(select == 0)
			break;
		switch(select)
		{ 
		//基础架构 -->定义元素 
		
//		case 1:
//			break;
//		case 2:
//			break;
//		default:
//			printf("输入的选择错误,请重新输入。\n");
//			break;
		case 1:
			//可以一连串尾部插入以-1结束 
			printf("请输入要插入的数据(-1结束):>"); //push_back  逗号表达式-判断逗号后真假 
			while(scanf("%d",&Item),Item != -1)
			{
					push_back(&mylist,Item); 
			//需要对函数进行实现 
			}
			break;
		case 2:
			//push_front 头部插入 
			printf("请输入要插入的数据tou(-1结束):>"); //push_back  逗号表达式-判断逗号后真假 
			while(scanf("%d",&Item),Item != -1)
			{
					push_front(&mylist,Item); 
			}
			break;
		case 3:
			//显示顺序表,函数声明之后去源文件实现 
			show_list(&mylist);		
			break;
		case 4:
			//尾部删除
			pop_back(&mylist); 
			break;
		case 5:
			//头部删除
			pop_front(&mylist); 
			break;
		case 11:
			break;
		default:
			printf("输入的选择错误,请重新输入。\n");
			break;
		}
		
	} 
	
	return 0 ;

} 


 头文件h

//头文件负责结构、函数、 数据的声明 
#ifndef _SEQLIST_H_
#define _SEQLIST_H_
#include<stdio.h>//引入概念 
//引入相应.cpp==源文件中需要用到的函数 
#include<malloc.h>
#include<assert.h>



//顺序表长度为8 
#define SEQLIST_INIT_SIZE 8
//定义int类型整形 数据元素 数据表 
typedef int ElemType;
//结构体 SeqList 初始化 
typedef struct SeqList
{
	ElemType *base;//基本成员- 顺序表空间 ==指针 
	int capacity;//容量 8
	int size; //表的大小<=8 
	
}SeqList;
//声明之后去相应.cpp文件进行实现 
void InitSeqList(SeqList *list) ;
void push_back(SeqList *list,ElemType x) ;//尾插 
void push_front(SeqList *list,ElemType x) ;//头插 
void show_list(SeqList *list); //显示列表 
void pop_back(SeqList *list);//尾部删除pop 
void pop_front(SeqList *list);//头部删除pop
#endif //_SEQLIST_H_

  • 6
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然,我可以为您介绍一些常见的数据结构与算法面试题。以下是一些常见的数据结构与算法面试题及其解答: 1. 请解释什么是数组? 数组是一种线性数据结构,它由相同类型的元素组成,并按照一定的顺序存储在连续的内存空间中。数组可以通过索引来访问和修改其中的元素。 2. 请解释什么是链表? 链表是一种线性数据结构,它由节点组成,每个节点包一个数据元素和一个指向下一个节点的指针。链表的优点是插入和删除操作的时间复杂度为O(1),但访问元素的时间复杂度为O(n)。 3. 请解释什么是栈和队列? 栈和队列都是常见的数据结构。 - 栈是一种后进先出(LIFO)的数据结构,只允许在栈顶进行插入和删除操作。 - 队列是一种先进先出(FIFO)的数据结构,允许在队尾进行插入操作,在队头进行删除操作。 4. 请解释什么是二叉树? 二叉树是一种特殊的树结构,每个节点最多有两个子节点。二叉树可以分为二叉搜索树、平衡二叉树、完全二叉树等不同类型。 5. 请解释什么是排序算法排序算法是将一组数据按照一定的顺序进行排列的算法。常见的排序算法有冒泡排序、插入排序、选择排序、快速排序、归并排序等。 6. 请解释什么是动态规划? 动态规划是一种解决多阶段决策问题的优化方法。它通过将问题分解为多个子问题,并保存子问题的解,避免重复计算,从而提高算法的效率。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值