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

网络运维是干嘛的高级seo

网络运维是干嘛的,高级seo,平面设计网站导航,知名的网站建设链表分为单链表、双链表和循环链表&#xff0c;这些理论知识在笔记中自然写了&#xff0c;这里我只写出其中的实现&#xff1a; 单链表的实现 #include <stdio.h> #include <stdlib.h> #include <string.h> typedef struct Book {char bookname[20];char a…

链表分为单链表、双链表和循环链表,这些理论知识在笔记中自然写了,这里我只写出其中的实现:

单链表的实现

#include <stdio.h>
#include <stdlib.h>
#include <string.h>	typedef struct Book {char bookname[20];char author[10];
}Book;typedef struct Node {Book book;struct Node *next;
}Node,*LinkList;//初始化链表 
void initChainedTable(Node **L){    //ok*L=(LinkList)malloc(sizeof(Node));(*L)->next=NULL;
}
//尾结点插入 
Node* putNodeByTail(Book book,Node *r){   //okNode *node=(Node*)malloc(sizeof(Node));node->book= book;node->next=NULL;r->next=node;return node;
}
//首节点插入
void putNodeByHead(Book book,LinkList L){   //okNode *node=(Node*)malloc(sizeof(Node));node->book=book;node->next=L->next;L->next=node;
} 
//删除其中一个结点
void deleteNode(int i,LinkList L){   //okNode *node=L->next;int counter=1;if (i == 1) {if (node != NULL) {L->next = node->next;free(node);} else {printf("List is empty, cannot delete.\n");}return;}while(node&&counter<(i-1)){node=node->next;++counter;}if(!node||i<=0){printf("index is out of bound \n");}else{Node* delnode = node->next;if (delnode) {node->next = delnode->next;free(delnode);} else {printf("Node at index %d does not exist\n", i);}}}
//向链表中插入元素
void insertNode(Book book,int i,LinkList L){   //okNode *newnode=(Node*)malloc(sizeof(Node));Node *node=L->next;newnode->book=book;int count=1;while(node&&count<(i-1)){node=node->next;++count;}if(!node||i<=0){printf("index is out of bound\n");}else{newnode->next=node->next;node->next=newnode;	}} 
//判断链表是否为空
int isEmpty(LinkList L){  //okreturn L->next==NULL?1:0;
} //获取第i个结点 
Node*  getNode(int i,LinkList L){  //okNode* node=L->next;int count=1;while(node&&count<i){node=node->next;++count;}if(node&&i>0) return node;printf("index is out of bound\n"); 
} 
//通过值获取到它的位置
int getIndex(Book book,LinkList L){  //okNode* node=L->next;int count=1;while(node&&strcmp(node->book.author,book.author)&&strcmp(node->book.bookname,book.bookname)){node=node->next;++count;}if(node) return -1;return count;
} 
//打印链表中的数据 
void printNodeData(LinkList L){    //okNode *node=L->next;while(node){printf("bookname:%s;author:%s\n",node->book.bookname,node->book.author);node=node->next;}if(!node) printf("你所给的是个空链表!\n"); 
}
//释放一个链表
void freeChainedTable(LinkList L){ Node *p=L->next;Node *q;while(p){  q=p->next;free(p);p=q; }printf("清除完成!\n");L->next=NULL;
}int main(){LinkList L;initChainedTable(&L);Book book1={"java","zhangyu"};Book book2={"php","zhang"};Book book3={"c#","nanchengyu"};putNodeByHead(book1,L);putNodeByHead(book2,L);putNodeByHead(book3,L);Book book4={"java","zhang"};freeChainedTable(L);printNodeData(L);system("pause");return 0;
}

双链表的实现

#include <stdio.h>
#include <stdlib.h>//这个源文件描述的是不循环双向链表typedef struct Book {char bookname[20];char author[10];
}Book;
typedef struct doLinkList{Book book;struct doLinkList *prior,*next;struct doLinkList *ele;
}Node,*LinkList;
//初始化链表 
void initDoLinkList(LinkList *L){*L=(LinkList)malloc(sizeof(Node));(*L)->prior=NULL;(*L)->next=NULL;(*L)->ele=*L;
}
//向链表添加结点 
void putNode(Book book,Node *listNode){Node *node=(Node*)malloc(sizeof(Node));node->book=book;listNode->ele->next=node;node->prior=listNode->ele;node->next=NULL;listNode->ele=node;
}
//打印结点数据 
void printNodeData(LinkList list){if(!list->next){printf("你所给的是个空链表!\n"); return;	} Node *node=list->next;while(node){printf("bookname:%s;author:%s\n",node->book.bookname,node->book.author);node=node->next;}
}
//查找链表数据 
Node* getNode(int i,LinkList list){Node *node=list->next;int counter=1;while(node&&counter!=i&&i>0){node=node->next;++counter;}if(i<0||i>counter){printf("索引超出范围!\n");return NULL;}return node;
}//删除链表结点
void delNode(int i,LinkList list){Node *p;if(!(p=getNode(i,list))){printf("并没有找到该节点!\n");}else if(p->next){p->prior->next=p->next;p->next->prior=p->prior;}else{p->prior->next=NULL;}free(p);} //向双向节点中插入结点(末尾节点不可以插入) 
void insertNode(int i,Book book,LinkList list){Node *p;Node *node=(Node*)malloc(sizeof(Node));node->book=book;if(p=getNode(i,list)){p->prior->next=node;node->prior=p->prior;node->next=p;p->prior=node;}else {printf("插入失败!\n");}
} int main(){LinkList L;initDoLinkList(&L);Book book1={"java","zhangyu"};Book book2={"php","zhang"};Book book3={"c#","nan"};putNode(book1,L);putNode(book2,L);
//	putNode(book3,L);insertNode(2,book3,L);printNodeData(L);system("pause");return 0;
}

循环链表的实现

#include <stdio.h>
#include <stdlib.h>//这个源代码设计的是循环链表,包括设计的尾指针,两个循环链表的组合,但是链表的其他操作我们在这就不去写了
// 设计这个尾指针的目的是在对表的首尾部分进行操作的时候可以降低时间复杂度
typedef struct Book {char bookname[20];char author[10];
}Book;typedef struct Node{Book book;struct Node *next;
}Node;typedef struct LoopLinkList{Node *headNode;Node *tailNode;
} *LoopList;
//初始化循环列表 
void initLoopLinkList(LoopList *L){  //okNode *headNode=(Node*)malloc(sizeof(Node));*L=(LoopList)malloc(sizeof(LoopList));(*L)->headNode=headNode;(*L)->tailNode=headNode;
}
//向循环链表中添加结点 
void putNode(Book book,LoopList L){   //okNode *node=(Node*)malloc(sizeof(Node));node->book=book;L->tailNode->next=node;L->tailNode=node;node->next=L->headNode;
}//将第二个循环链表添加到第一个循环链表后
LoopList  connectTable(LoopList L1,LoopList L2){   //0kL1->tailNode->next=L2->headNode->next;free(L2->headNode);L2->tailNode->next=L1->headNode;L1->tailNode=L2->tailNode;return L1;
}//打印链表中的数据 
void printNodeData(LoopList L){      //okNode *node=L->headNode->next;while(node!=L->headNode){printf("bookname:%s;author:%s\n",node->book.bookname,node->book.author);node=node->next;}if(!node) printf("你所给的是个空链表!\n"); 
}
//获取循环列表的长度 
int getSize(LoopList L){    //okNode *node=L->headNode->next;int counter=0;while(L->headNode!=L->tailNode&&node!=L->headNode){node=node->next;++counter;}return counter;
}int main(){LoopList L;initLoopLinkList(&L);Book book1={"java","zhangyu"};Book book2={"php","zhang"};Book book3={"c#","nan"};putNode(book1,L);putNode(book2,L);putNode(book3,L);printf("表1:\n");printNodeData(L);LoopList L2;initLoopLinkList(&L2);Book book4={"jaa","hangyu"};Book book5={"ph","zhng"};Book book6={"c","an"};putNode(book4,L2);putNode(book5,L2);putNode(book6,L2);printf("表2:\n");printNodeData(L2);LoopList list=connectTable(L,L2);printf("连接后的表:\n");printNodeData(list);system("pause");return 0;
}

补充:能不能实现循环双链表?这样循环有意义吗或者说这种数据结构有其特点和优势吗?有的话可以设计一下

http://www.hengruixuexiao.com/news/31123.html

相关文章:

  • 人力资源和社会保障部门户网站如何增加网站的外链
  • 网站开发人月薪百度快照手机入口
  • 服务器做网站需安装哪些软件西安网站搭建
  • 代做视频的网站好个人网站模板
  • 做高端网站的公司seo优化在线
  • 哪些网站可以接设计的单子做文章代写
  • 酒泉网站建设设计新站如何让百度快速收录
  • 为什么做独立站的人都不止一个网站游戏推广代理平台
  • 分类id wordpress南宁哪里有seo推广厂家
  • 个人工商户做网站备案网站设计制作教程
  • 重庆做网站公司贴吧手机百度提交入口
  • 浏览器网站大全免费数据分析网站
  • 网站开发开题报告ppt如何进行网站性能优化?
  • 分类目录网站平台网站推广名词解释
  • 网站名称注册程序如何免费创建自己的网站平台
  • 局域网网站百度seo排名优化提高流量
  • 做音乐网站首页要求网络营销系统
  • 手机自己做网站怎么优化百度关键词
  • 协会网站建设需要注意什么保温杯软文营销300字
  • 网站用开源cmspython培训
  • 网站建设管理工作计划营销推广的形式包括
  • 如何通过网站做网上报名系统网站seo优化外包顾问
  • 学习电子商务网站建设与管理感想大数据分析网站
  • 移动网站怎么建设长沙本地推广平台
  • 网站建设与制作这个行业怎么样呢国内做网站的公司
  • 征求网站建设钓鱼网站制作教程
  • 内蒙古网站seo企业广告宣传
  • 常州淄博网站优化推广普通话的手抄报
  • 阿里云个人怎么免费做网站短视频推广app
  • 文案做站内网站日常维护有哪些代运营服务