从化哪里做网站好,东莞房价会跌吗,上海专业网站建站品牌,嘉兴外贸网站建1.将双向链表和循环链表自己实现一遍#xff0c;至少要实现创建、增、删、改、查、销毁工作
循环链表
looplinklist.h
#ifndef LOOPLINKLIST_H
#define LOOPLINKLIST_H#include myhead.htypedef int datatype;typedef struct Node
{union {int len;datatype data;}…
1.将双向链表和循环链表自己实现一遍至少要实现创建、增、删、改、查、销毁工作
循环链表
looplinklist.h
#ifndef LOOPLINKLIST_H
#define LOOPLINKLIST_H#include myhead.htypedef int datatype;typedef struct Node
{union {int len;datatype data;};struct Node *next;
}Node,*NodePtr;//创建循环链表
NodePtr list_create();//链表判空
int list_empty(NodePtr L);//链表申请空间封装节点
NodePtr apply_node(datatype e);//按位置进行查找
NodePtr list_search_pos(NodePtr L,int pos);//链表尾插
int list_insert_tail(NodePtr L,datatype e);//链表遍历
int list_show(NodePtr L);//链表头删
int list_delete_head(NodePtr L);//链表销毁
void list_destroy(NodePtr L);//约瑟夫环
void ysfh(NodePtr L,int m);#endiflooplinklist.c
#include looplinklist.h//创建循环链表
NodePtr list_create()
{NodePtr L(NodePtr)malloc(sizeof(Node));if( NULLL ){printf(创建失败\n);return NULL;}L-len 0;L-next L;printf(创建成功\n);return L;
}//链表判空
int list_empty(NodePtr L)
{return L-nextL;
}//链表申请空间封装节点
NodePtr apply_node(datatype e)
{NodePtr p (NodePtr)malloc(sizeof(Node));if( NULLp ){printf(申请失败\n);return NULL;}p-data e;p-next NULL;return p;
}//按位置进行查找
NodePtr list_search_pos(NodePtr L,int pos)
{if( NULLL || pos0 || posL-len){printf(查找失败\n);return NULL;}NodePtr q L;for(int i1;ipos;i){qq-next;}return q;
}//链表尾插
int list_insert_tail(NodePtr L,datatype e)
{if( NULLL ){printf(尾插失败\n);return -1;}NodePtr p apply_node(e);if( NULLp ){return -1;}NodePtr q list_search_pos(L,L-len);p-next q-next;q-next p;L-len;return 0;
}//链表遍历
int list_show(NodePtr L)
{if( NULLL || list_empty(L) ){printf(遍历失败\n);return -1;}NodePtr q L-next;while( q!L ){printf(%d\t,q-data);q q-next;}printf(\n);return 0;
}//链表头删
int list_delete_head(NodePtr L)
{if( NULLL || list_empty(L) ){printf(头删失败\n);return -1;}NodePtr q L-next;L-next q-next;L-len--;free(q);qNULL;return 0;
}//链表销毁
void list_destroy(NodePtr L)
{if( NULLL ){printf(销毁失败\n);return ;}while( !list_empty(L) ){list_delete_head(L);}free(L);LNULL;printf(销毁成功\n);return;
}双向链表
doublelinklist.h
#ifndef DOUBLELINKLIST_H
#define DOUBLELINKLIST_Htypedef char datatype;typedef struct Node
{union{int len;datatype data;}struct Node *prio;struct Node *next;
}Node,*NodePtr;//创建双向链表
NodePtr list_create();//链表判空
int list_empty(NodePtr L);//申请节点封装数据
NodePtr apply_node(datatype e);//链表头插
int list_insert_head(NodePtr L,datatype e);//链表遍历
int list_show(NodePtr L);//按位置查找返回节点
NodePtr list_search_pos(NodePtr L,int pos);//链表任意位置删除
int list_delete_pos(NodePtr L,int pos);//链表空间释放
void list_destroy(NodePtr L);#endifdoublelinklist.c
#include doublelinklist.h//创建双向链表
NodePtr list_create()
{NodePtr L (NodePtr)malloc(sizeof(Node));if( NULLL ){printf(创建失败\n);return NULL;}L-len 0;L-prio NULL;L-next NULL;printf(创建成功\n);return L;
}//链表判空
int list_empty(NodePtr L)
{return L-next NULL;
}//申请节点封装数据
NodePtr apply_node(datatype e)
{NodePtr p (NodePtr)malloc(sizeof(Node));if( NULLp ){printf(节点申请失败\n);return NULL;}p-data e;p-prio NULL;p-next NULL;return
}//链表头插
int list_insert_head(NodePtr L,datatype e)
{if( NULLL ){printf(头插失败\n);return -1;}NodePtr p apply_node(e);if( NULLp ){return -1;}if( list_empty(L) ){p-prio L;L-next p;}else{p-prio L;p-next L-next;L-next-prio p;L-next p;}L-len;return 0;
}//链表遍历
int list_show(NodePtr L)
{if( NULLL || list_empty(L) ){printf(遍历失败\n);return -1;}printf(当前数据为);NodePtr q L-next;while( q ){printf(%c\t,q-data);qq-next;}printf(\n);return 0;
}//按位置查找返回节点
NodePtr list_search_pos(NodePtr L,int pos)
{if( NULLL || list_empty(L) || pos0 || posL-len ){printf(查找失败\n);return NULL;}NodePtr q L;for(int i1;ipos;i){q q-next;}return q;
}//链表任意位置删除
int list_delete_pos(NodePtr L,int pos)
{if( NULLL || list_empty(L) || pos1 || posL-len ){printf(删除失败\n);return -1;}NodePtr q list_search_pos(L,pos);if( q-nextNULL ){q-prio-nextNULL;}else{q-prio-next q-next;q-next-prio q-prio;}free(q);qNULL;L-len--;return 0;
}//链表空间释放
void list_destroy(NodePtr L)
{if( NULLL ){printf(释放失败\n);return ;}while( !list_empty(L) ){list_delete_pos(L,1);}free(L);LNULL;printf(链表释放成功\n);return ;
}2.使用循环链表完成约瑟夫环问题
//约瑟夫环
void ysfh(NodePtr L,int m)
{NodePtr p L-next;NodePtr q L;while( p-next!p ){for(int i1;im;i){q p;p p-next;if(pL){qq-next;pp-next;}}printf(%d\t,p-data);NodePtr a p; //标记q-next p-next; //p-next 孤立pp-next;free(a); //释放a NULL;}printf(\n最后剩下的节点: %d\n, p-data); free(p); // 释放最后一节点 }3.使用栈完成进制转换
输入一个整数进制数
输出该数的对应的进制数
void DC(StackPtr S,int m,int n)
{while(m/n!0){S-top;S-data[S-top]m%n;mm/n;}S-top;S-data[S-top]1;while(S-top!-1){printf(%d,S-data[S-top]);S-top--;}printf(\n);
}思维导图