针对考研的C语言学习(定制化快速掌握重点5)

顺序表

特点:

写代码主要就是增删改查!!!

写代码的边界性非常重要以及考研插入和删除的位置都是从1开始,而数组下标是从0开始

【注】下标和位置的关系

线性表最重要的是插入和删除会涉及边界问题以及判断是否合法

【判断合法】"位置<1 || 位置 > 线性表的长度加一" 这是插入数据的判断合法性

因为插入数据只能在数据中间插入或者在数据末尾插入

"位置<1 || 位置 > 线性表的长度" 这是删除数据的合法性边界判断

因为删除数据只能在已有数据中进行删除

插入代码展示及解释

所谓的插入只不过是"把要插入的位置的数据以及该位置后面的数据都统一往后面移动而已"

所以应该有两种方法

"1.从要插入的位置的原始数据开始往后移,但是这样会导致啥问题了???"

对的!!!会把后面的原始数据全部覆盖了

所以要从后面往前面移动

//插入
bool insert_list(SeqList &l,int pos,int data)
{
	if (pos<1 || pos > l.len + 1)
	{
		return false;
	}
	if (l.len == MAX_NUM)
	{
		return false;
	}
	for (int i = l.len; i >= pos ; --i)
	{
		l.data[i] = l.data[i - 1];
	}
	l.data[pos-1] = data;//位置和下标差1
	++l.len;
	return true;
}


#include<stdio.h>
#define MAX_NUM 20
typedef int ElemType;
typedef struct {
	ElemType data[MAX_NUM];
	int len;//实际长度
}SeqList;
bool insert_list(SeqList &l,int pos,int data)
{
	if (pos<1 || pos > l.len + 1)
	{
		return false;
	}
	if (l.len == MAX_NUM)
	{
		return false;
	}
	for (int i = l.len; i >= pos ; --i)
	{
		l.data[i] = l.data[i - 1];
	}
	l.data[pos-1] = data;//位置和下标差1
	++l.len;
	return true;
}
void print_list(SeqList& l)
{
	for (int i = 0; i < l.len; ++i)
	{
		printf("%3d", l.data[i]);
	}
	printf("\n");
}
bool del_list(SeqList& l, int pos)
{
	if (pos<1 || pos > l.len)
	{
		return false;
	}
	for (int i = pos-1; i < l.len-1; ++i)
	{
		l.data[i] = l.data[i + 1];
	}
	--l.len;
	return true;
}
bool search_list(SeqList& l, int pos)
{
	if (pos<1 || pos > l.len)
		return false;
	else
		return true;
}
int main()
{
	SeqList l;
	l.data[0] = 1;
	l.data[1] = 2;
	l.data[2] = 3;
	l.len = 3;
	int insert_data = 0;
	scanf("%d", &insert_data);
	bool ret = insert_list(l, 2, insert_data);
	if (ret)
		print_list(l);
	else
		puts("false");
	int pos = 0;
	scanf("%d", &pos);
	ret = del_list(l, pos);
	if (ret)
		print_list(l);
	else
		puts("false");
	return 0;
}

链表

增删查改

#define _CRT_SECURE_NO_WARNINGS 1
#include<stdio.h>
#include<stdlib.h>
typedef int ElemType;
typedef struct LNode {
	ElemType data;
	struct LNode* next;
}Lnode,*LinkList;
void insert_head_list(LinkList& l)
{
	ElemType data = 0;
	scanf("%d", &data);	
	while (data != 9999)
	{
		LinkList tmp = (LinkList)malloc(sizeof(Lnode));
		tmp->data = data;
		tmp->next = l->next;
		l->next = tmp;
		scanf("%d", &data);
	}
}
void insert_tail_list(LinkList& l)
{
	LinkList cur = l;
	ElemType data = 0;
	scanf("%d", &data);
	while (data != 9999)
	{
		LinkList tmp = (LinkList)malloc(sizeof(Lnode));
		tmp->next = cur->next;
		tmp->data = data;
		cur->next = tmp;
		cur = tmp;
		scanf("%d", &data);
	}
}
//删除
bool delete_list(LinkList& l,int pos)
{
	//头结点的位置是0,真正有数据的为第一个节点,也就是第一个位置
	if (pos < 1)
	{
		return false;
	}
	LinkList cur = l -> next;
	//找要删除位置的前一个节点的位置
	for (int i = 1; cur && i < pos-1 ; ++i)
	{
		cur = cur->next;
	}
	LinkList del = cur->next;
	cur->next = del->next;//断链
	free(del);
	return true;
}
void print_list(LinkList& l)
{
	LinkList cur = l->next;
	while (cur)
	{
		printf("%d ", cur->data);
		cur = cur->next;
	}
	printf("\n");
}

bool insert_pos(LinkList& l, int pos,int val)
{

	//头结点的位置是0,真正有数据的为第一个节点,也就是第一个位置
	if (pos < 1)
	{
		return false;
	}
	LinkList cur = l->next;
	//找要插入位置的前一个节点的位置
	for (int i = 1; cur && i < pos - 1; ++i)
	{
		cur = cur->next;
	}
	LinkList v = (LinkList)malloc(sizeof(LNode));
	v->data = val;
	v->next = cur->next;
	cur->next = v;
	return true;
}

int main()
{
	LinkList l = (LinkList)malloc(sizeof(Lnode)); //存储头节点的头指针
	l->next = NULL;
	//insert_head_list(l);//头插法
	insert_tail_list(l);//尾插法
	print_list(l);
	delete_list(l, 2);
	print_list(l);
	insert_pos(l, 3, 999);
	print_list(l);
	return 0;
}

后序会补上

相关推荐
闻缺陷则喜何志丹6 分钟前
【C++动态规划 图论】3243. 新增道路查询后的最短距离 I|1567
c++·算法·动态规划·力扣·图论·最短路·路径
charlie11451419118 分钟前
C++ STL CookBook
开发语言·c++·stl·c++20
小林熬夜学编程29 分钟前
【Linux网络编程】第十四弹---构建功能丰富的HTTP服务器:从状态码处理到服务函数扩展
linux·运维·服务器·c语言·网络·c++·http
倔强的石头10640 分钟前
【C++指南】类和对象(九):内部类
开发语言·c++
Jackey_Song_Odd41 分钟前
C语言 单向链表反转问题
c语言·数据结构·算法·链表
A懿轩A2 小时前
C/C++ 数据结构与算法【数组】 数组详细解析【日常学习,考研必备】带图+详细代码
c语言·数据结构·c++·学习·考研·算法·数组
机器视觉知识推荐、就业指导2 小时前
C++设计模式:享元模式 (附文字处理系统中的字符对象案例)
c++
半盏茶香2 小时前
在21世纪的我用C语言探寻世界本质 ——编译和链接(编译环境和运行环境)
c语言·开发语言·c++·算法
Ronin3053 小时前
11.vector的介绍及模拟实现
开发语言·c++
✿ ༺ ོIT技术༻3 小时前
C++11:新特性&右值引用&移动语义
linux·数据结构·c++