当前位置: 首页 > news >正文

广东网站建设制作价格网站推广的方式有哪些?

广东网站建设制作价格,网站推广的方式有哪些?,网站建设乙方义务,自己怎么设计公园目录一、思路>>>>>>>>>>>>过程<<<<<<<<<<<<<<<1.打印2.尾插3.尾删4.头插5.头删6.查找7.指定位置后插入8.指定位置后删除9.链表的销毁二、整个程序1.SLTlist.c2.SLTlist.c一、思路 #define …

目录

  • 一、思路
  • >>>>>>>>>>>>过程<<<<<<<<<<<<<<<
  • 1.打印
  • 2.尾插
  • 3.尾删
  • 4.头插
  • 5.头删
  • 6.查找
  • 7.指定位置后插入
  • 8.指定位置后删除
  • 9.链表的销毁
  • 二、整个程序
  • 1.SLTlist.c
  • 2.SLTlist.c

一、思路

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>
#include<stdlib.h>
#include<assert.h>typedef int SLTdataType;typedef struct SLTNodelist
{SLTdataType data;struct SLTNodelist* next;
}SLTNode;//打印
void SLTPrint(SLTNode* phead);
//尾插
void SLTAddBack(SLTNode** pphead, SLTdataType x);
//尾删
void SLTDelBack(SLTNode** pphead);
//头插
void SLTAddPop(SLTNode** pphead, SLTdataType x);
//头删
void SLTDelPop(SLTNode** pphead);
//查找
SLTNode* SLTFindlist(SLTNode* phead, SLTdataType x);
//指定位置后插入
void SLTAddPoint(SLTNode** pphead, SLTNode* pos, SLTdataType x);
//指定位置后删除
void SLDelPoint(SLTNode** pphead, SLTNode* pos);
//链表的销毁
void SLTDestroy(SLTNode** pphead);

>>>>>>>>>>>>过程<<<<<<<<<<<<<<<

1.打印

void PrintfSTLlist(SLTNode*phead)
{STLNode*cur=phead;while(cur){printf("%d->\n",cur->Data);cur=cur->next;}printf("NULL\n");}

1.这个打印函数需要断言吗?
不需要,即使结构体为空,也能打印,只不过是没有数据而已,这是打印出来的就是空的。如果能打印出来,但是却断言报错,不太合适。

2.怎么打印?
用一个指针cur指向结构体,用while循环打印出来,当cur指向的结构体为空时,停止打印。

3.while的判断条件可以是while(cur->next)吗?
不可以,因为这样最后一个的数据就打印不出来了。

4.在while循环中,让cur指向下一个结构体,可以用cur++吗?
不可以,不同于顺序表,顺序表的数据是存储在一个连续的空间里的,链表它是链接起来的结构体地址。

2.尾插

SLTNode*Buynewnode(SLTDataTap x)
{SLTNode*newnode=(SLTNode*)malloc(sizeof(SLTNode));if(newnode==NULL){perror("malloc failed");return NULL;}newnode->Data=x;newnode->next=NULL;return newnode;
}
void SLTAddPop(SLTNode**pphead,SLTDataTap x)
{//开辟空间SLTNode*newnode=Buynewnode(x);if(newnode==NULL){return;}//找尾//情况一:pphead为空if(*pphead==NULL){*pphead=newnode;}//情况二:pphead不为空SLTNode*tail=pphead;else{while(tail->next){tail=tail->next;}tail->next=newnode;}
}

1.为什么void SLTAddPop(SLTNode**pphead,SLTDataTap)这不能用一级指针接收?

2.怎么进行尾插?
在插入一个数据之前,首先得为这个结构体开辟一个结点,用malloc开辟,由于插入数据时我们都要进行开辟一个结的操作,所以我们可以打包成一个函数SLTNode*Buynewnode(SLTDataTap x)
进行尾插那么就是要找到尾,找尾分两种情况:1. 当*pphead本身为空时,就直接将newnode插入就可以了;2. *pphead本身不为空时,只要找到tail->next为空的,那个就是结构体的尾了
在这里插入图片描述

3.当pphead不为空时,找尾while循环的判断条件可以写成这样tail!=NULL与插入结点时tail=newnode吗?
不可以,因为这样就无法保持链接状态了。

3.尾删

void SLTDelBack(SLTNode**pphead)
{assert(*pphead);//情况一:只有一个数据if((*pphead)->next==NULL){free(*pphead);*pphead=NULL;}//情况二:不止一个数据SLTNode*tail=*pphead;SLTNode*pre=*pphead;while(tail->next){pre=tail;tail=tail->next;}free(tail);tail=NULL;pre->next=NULL;
}

1.尾删需要断言吗?
需要,因为如果链表为空,是删不了的;
2.尾删的思路
尾删分三种讨论:

1.如果链表为空,删不了,我们这里断言判断一下
2.链表中只有一个数据
3.链表中的数据为一个以上

4.头插

void SLTAddPop(SLTNode** pphead, SLTdataType x)
{assert(pphead);SLTNode* newnode = Buynewnode(x);if (newnode == NULL){return;}newnode->next = *pphead;*pphead = newnode;
}

1.头插需要断言吗?
因为pphead永远不能为空,所以要断言;但是当链表为空的时候,可以插入数据,*pphead是不需要断言的。
2.头插的思路
首先先要创建一个结点,将结点的next与链表的第一个指针链接起来。最后要注意把链表的头给改成newnode。

5.头删

void SLTDelPop(SLTNode** pphead)
{assert(pphead);assert(*pphead);SLTNode* cur = *pphead;*pphead = cur->next;free(cur);cur = NULL;
}

1.头删需要断言吗?
因为pphead永远不能为空,所以要断言;且空链表不能删除,所以*pphead也需要断言。
2.头删的思路
在这里插入图片描述

6.查找

SLTNode* SLTFindlist(SLTNode* phead, SLTdataType x)
{SLTNode* cur = phead;while (cur){if (cur->data == x){return cur;}cur = cur->next;}return NULL;
}

1.查找需要断言吗?
不需要,链表为空就返回NULL;
2.查找的思路
当链表的cur不为空,就继续逐一比对,找到了就返回cur,没找到就指向下一个;直到cur指向空,如果还没找到,就返回NULL;

7.指定位置后插入

void SLTAddPoint(SLTNode** pphead, SLTNode* pos, SLTdataType x)
{assert(pos);assert(pphead);SLTNode* newnode = Buynewnode(x);if (newnode == NULL){return;}//newnode->next = pos->next;pos->next = newnode;}

1.需要断言吗?
因为pphead永远不能为空,所以要断言;指定的位置pos不能为空,所以需要断言;
2.思路
创建一个新结点newnode,然后先让newnode->next = pos->next;让newnode的后面链接起来,在让pos和newnode链接起来pos->next = newnode;;反过来写的话,由于pos->next已经被改了,所以不能是pos与newnode链接,插入就会失败;

8.指定位置后删除

void SLDelPoint(SLTNode** pphead, SLTNode* pos)
{assert(pos);assert(pphead);assert(*pphead);if ((*pphead)->next == NULL&&pos->next==NULL){return;}else{SLTNode* cur = pos->next;pos->next = cur->next;free(cur);cur = NULL;}
}

1.需要断言吗?
因为pphead永远不能为空,所以要断言;因为如果链表为空,是删不了的,所以*phead需要断言,指定的位置pos不能为空,所以需要断言;

9.链表的销毁

void SLTDestroy(SLTNode** pphead)
{assert(pphead);assert(*pphead);SLTNode* cur = *pphead;SLTNode* pre = cur;while (cur){pre = cur->next;free(cur);cur = pre;}*pphead = cur;
}

2.思路
结点逐一free,最后记得把*pphead改为最后的cur。

二、整个程序

1.SLTlist.c

#define _CRT_SECURE_NO_WARNINGS 1#include<stdio.h>
#include<stdlib.h>
#include<assert.h>typedef int SLTdataType;typedef struct SLTNodelist
{SLTdataType data;struct SLTNodelist* next;
}SLTNode;//打印
void SLTPrint(SLTNode* phead);
//尾插
void SLTAddBack(SLTNode** pphead, SLTdataType x);
//尾删
void SLTDelBack(SLTNode** pphead);
//头插
void SLTAddPop(SLTNode** pphead, SLTdataType x);
//头删
void SLTDelPop(SLTNode** pphead);
//查找
SLTNode* SLTFindlist(SLTNode* phead, SLTdataType x);
//指定位置后插入
void SLTAddPoint(SLTNode** pphead, SLTNode* pos, SLTdataType x);
//指定位置后删除
void SLDelPoint(SLTNode** pphead, SLTNode* pos);
//链表的销毁
void SLTDestroy(SLTNode** pphead);

2.SLTlist.c

#define _CRT_SECURE_NO_WARNINGS 1#include"SLTlist.h"void SLTPrint(SLTNode* phead)
{SLTNode* cur = phead;while (cur){printf("%d->", cur->data);cur = cur->next;}printf("NULL\n");
}SLTNode* Buynewnode(SLTdataType x)
{SLTNode* newnode = (SLTNode*)malloc(sizeof(SLTNode));if (newnode == NULL){return NULL;}newnode->data = x;newnode->next = NULL;return newnode;
}void SLTAddBack(SLTNode** pphead, SLTdataType x)
{assert(pphead);SLTNode* newnode = Buynewnode(x);if (newnode == NULL){return;}//情况1:pphead为空if (*pphead == NULL){*pphead = newnode;}//情况2:pphead不为空//找尾else{SLTNode* tail = *pphead;while (tail->next){tail = tail->next;}tail->next = newnode;}
}void SLTDelBack(SLTNode** pphead)
{assert(pphead);assert(*pphead);//情况1:链表中只有一个节点if ((*pphead)->next == NULL){free(*pphead);*pphead = NULL;}//情况2:链表中只有一个节点else{SLTNode* tail = *pphead;while (tail->next->next){tail = tail->next;}SLTNode* pre = tail->next;free(pre);tail->next = NULL;}}void SLTAddPop(SLTNode** pphead, SLTdataType x)
{assert(pphead);SLTNode* newnode = Buynewnode(x);if (newnode == NULL){return;}newnode->next = *pphead;*pphead = newnode;
}void SLTDelPop(SLTNode** pphead)
{assert(pphead);assert(*pphead);SLTNode* cur = *pphead;*pphead = cur->next;free(cur);cur = NULL;
}SLTNode* SLTFindlist(SLTNode* phead, SLTdataType x)
{SLTNode* cur = phead;while (cur){if (cur->data == x){return cur;}cur = cur->next;}return NULL;
}void SLTAddPoint(SLTNode** pphead, SLTNode* pos, SLTdataType x)
{assert(pos);assert(pphead);SLTNode* newnode = Buynewnode(x);if (newnode == NULL){return;}//newnode->next = pos->next;pos->next = newnode;}void SLDelPoint(SLTNode** pphead, SLTNode* pos)
{assert(pos);assert(pphead);assert(*pphead);if ((*pphead)->next == NULL&&pos->next==NULL){return;}else{SLTNode* cur = pos->next;pos->next = cur->next;free(cur);cur = NULL;}
}void SLTDestroy(SLTNode** pphead)
{assert(pphead);assert(*pphead);SLTNode* cur = *pphead;SLTNode* pre = cur;while (cur){pre = cur->next;free(cur);cur = pre;}*pphead = cur;
}
http://www.yidumall.com/news/86882.html

相关文章:

  • wordpress shortcode 插件seo外包优化
  • 网页ui素材江门seo网站推广
  • 江苏有哪些做网站建设的公司seo关键词推广案例
  • 搜搜网站收录提交入口免费发布信息的平台有哪些
  • 帝国做视频网站seo研究协会
  • 怎么用ps做网站首页图片品牌运营中心
  • 南漳做网站大数据精准营销案例
  • 网站截图可以做证据吗关键词优化怎么优化
  • 群晖wordpress外网搜索引擎优化seo专员招聘
  • 安阳铁保芬seo专业优化公司
  • 大型集团网站建设云seo关键词排名优化软件
  • 做网站会被捉吗影响seo排名的因素有哪些
  • 西宁市建设网站公司电话淘宝关键词工具
  • 广州微信网站建设公司长春网站关键词推广
  • 青岛网站设计公司微信朋友圈广告在哪里做
  • 做网站公司的介绍用asp做的网站
  • 用dw做网站的代码seo搜索优化网站推广排名
  • 网站建设催款函网站运营推广方式
  • 公司建设一个网站有什么好处关键词竞价排名名词解释
  • 网站优化推广培训如何使用免费b站推广网站
  • 网站建设后台济南做网站公司哪家好
  • 网站公安备案怎样注销百度营销登录平台
  • 公文写作 课程中心网站建设中国科技新闻网
  • wordpress字体自适应seo网站建设公司
  • 百度怎么发布网站整合营销公司排名
  • 阜康网站建设新手怎么入行seo
  • 手机网站返回顶部代码微博付费推广有用吗
  • 蓝色网站模板十大软件免费下载网站排行榜
  • 哈尔滨网站优化推广公司排行榜哪个网站最好
  • 网站的建设与设计论文百度大搜数据多少钱一条