重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
向一个空顺序线性表中存入一系列数据元素
站在用户的角度思考问题,与客户深入沟通,找到港闸网站设计与港闸网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站制作、做网站、企业官网、英文网站、手机端网站、网站推广、域名申请、虚拟空间、企业邮箱。业务覆盖港闸地区。
#include stdio.h
#include stdlib.h
/*
1.创建结构体-----具体事物的抽象
2.创建链表
3.创建结点
4.插入操作
4.1 表头插入
4.2 表尾插入
4.3 指定位置插入(指定位置的前面)
5.删除操作
5.1 表头删除
5.2 表尾删除
5.3 指定位置删除
6.判断是否为空
7.打印链表
*/
//单链表的结构体
typedef struct SingleList
{
//数据域
int data; //以这个数据为例
//struct MM myMM;
//指针域
struct SingleList *next;
}LIST,*LPLIST;
/*
别名:习惯大写
起别名---小名
//好处:单词少,好看(含义更精简)
struct SingleList 换一种叫法: LIST;
strcut SingleList * 换一种叫法: LPLIST
*/
//-------2.创建链表 ---任何结构都需要用一个东西去表示
LPLIST CreateList()
{
//创建过程就是初始化过程---初始化基本数据成员过程
//需要内存空间
LPLIST List = (LPLIST)malloc(sizeof(LIST));
if (List == nullptr)
{
printf("失败了\n");
system("pause");
exit(0);
}
//初始化基本数据成员----有表头的链表
List-next = nullptr;
return List;
}
//-------3.创建结点
LPLIST CreateNode(int data)
{
//1.需要内存
LPLIST Node = (LPLIST)malloc(sizeof(LIST));
//2.初始化基本数据成员
Node-data = data; //和创建链表多了数据域
Node-next = nullptr;
return Node;
}
//-------4.1 头插法
//函数写法:形参可以表示要操作的东西
//插入的链表是(List),插入的数据是多少(data)
void InsertListHeadNode(LPLIST List,int data)
{
//插入:创建插入的结点
LPLIST newNode = CreateNode(data); //创建结点
//插入操作
newNode-next = List-next;
/*
c=1
b=2
a=c;
c=b;
*/
List-next = newNode;
}
//-------4.2 尾插法
void InsertListTailNode(LPLIST List, int data)
{
//找到表尾---定义一个移动的指针
LPLIST tailNode = List;
while (tailNode-next != nullptr)
{
tailNode = tailNode-next;
}
//创建插入的结点
LPLIST newNode = CreateNode(data);
tailNode-next = newNode;
}
//-------4.3 指定位置
void InsertListAppoinNode(LPLIST List, int data, int PosData)
{
//创建两个移动的指针:去找指定位置和指定位置的前面
LPLIST frontNode = List;
//frontNode-next==taiNode:判断相邻
LPLIST tailNode = List-next;
//判断是否为空
while (tailNode-data != PosData)
{
/*
frontNode=frontNode-next;
tailNode=tailNode-next;
*/
frontNode = tailNode;
tailNode = frontNode-next;
if (tailNode == nullptr)
{
printf("未找到指定位置\n");
system("pause");
exit(0);
}
}
//tailNode-data=data;
//找到后创建插入的结点
LPLIST newNode = CreateNode(data);
frontNode-next = newNode;
newNode-next = tailNode;
}
//-------5.判断是否为空
//和创建的时候比较
int IsEmptyList(LPLIST List)
{
if (List-next == nullptr)
return 1; //返回1表示为空
return 0; //表示不为空
}
////-------6.打印数据
void PrintList(LPLIST List)
{
if (IsEmptyList(List))
{
printf("链表为空,无法打印");
system("pause");
exit(0);
}
LPLIST pNext = List-next;
while (pNext != nullptr)
{
printf("%d\t", pNext-data);
pNext = pNext-next;
}
printf("\n");
}
//-------7.删除
//头删除
void DeleteListHeadNode(LPLIST List)
{
if (IsEmptyList(List))
{
printf("链表为空,无法删除\n");
system("pause");
exit(0);
}
LPLIST DNode = List-next;
List-next = DNode-next;
free(DNode);
DNode = nullptr;
}
//-------8.尾删
void DeleteListTailNode(LPLIST List)
{
if (IsEmptyList(List))
{
printf("链表为空,无法删除\n");
system("pause");
exit(0);
}
//找到表尾---定义一个移动的指针
LPLIST tailNode = List-next;
LPLIST tailFront = List;
while (tailNode-next != nullptr)
{
tailFront = tailNode;
tailNode = tailFront-next;
}
tailFront-next = nullptr;
free(tailNode);
}
//-------9.指定位置删除
void DeleteListAppoinNode(LPLIST List, int PosData)
{
//创建两个移动的指针:去找指定位置和指定位置的前面
LPLIST frontNode = List;
//frontNode-next==taiNode:判断相邻
LPLIST tailNode = List-next;
//判断是否为空
while (tailNode-data != PosData)
{
/*
frontNode=frontNode-next;
tailNode=tailNode-next;
*/
frontNode = tailNode;
tailNode = frontNode-next;
if (tailNode == nullptr)
{
printf("未找到指定位置\n");
system("pause");
exit(0);
}
}
frontNode-next = tailNode-next;
free(tailNode);
}
int main()
{
LPLIST List = CreateList(); //List创建成功
printf("插入:\n");
InsertListHeadNode(List, 1);
InsertListHeadNode(List, 2);
InsertListHeadNode(List, 3);
InsertListTailNode(List, 0);
PrintList(List);
printf("删除:\n");
DeleteListHeadNode(List);
PrintList(List);
DeleteListTailNode(List);
PrintList(List);
printf("指定位置:\n");
//看不懂,可以找群主
InsertListAppoinNode(List, 4, 2);
InsertListAppoinNode(List, 3, 2);
//C/C++ 8群
PrintList(List);
// 491994603
DeleteListAppoinNode(List, 2);
PrintList(List);
system("pause");
return 0;
}
向一个空顺序线性表中存入一系列数据元素,我使用了多种插入方式,而对你来说只需要其中一种方式,通过循环的方式去插入就好了.
这是逗号表达式,没有括号表达式。。
((b=(2,3),b+2),15+b)
从左往右一次执行语句,以逗号作为分界,最后返回最后一个语句的值
所以
b=3
最后返回15+b
=18
b=18
b=b+b
=36
b+=b-=((b=(2,3),b+2),15+b)
赋值且运算是右结合
b=3
b-=18
b=-15
b+=b
b=-30
你可以用字符指针作为函数的参数,自己在函数里面设计一个格式去读这个指针指向的一串字符。
比如printf ,scanf 函数就是这样的。函数参数就有字符指针。
例如printf("the data is %d",x);
字符串"the data is %d"的首地址给了字符指针。
1、空函数:返回值为void类型的函数,可以用return,也可以不用return。 不用return和在函数结束处有个return是等效的。但要注意return后面除了分号以外什么也没有。
2、空值函数:返回值为NULL的函数。 如果是有返回类型的函数, 返回空指针用“return NULL;"。这种函数就空值函数。