/* * function: 直接插入排序 * @param [ in] * @param [out] * @return */ void insert_sort_linklist(linklist* head,datatype data){ linklist* p=head; while(NULL!=p->pnext && p->pnext->param < data){ p=p->pnext; } linklist* temp=create_linklist(data); temp->pnext = p->pnext; p->pnext = temp; head->param++; } /* * function: 倒序链表 * @param [ in] * @param [out] * @return */ void linklist_desc(linklist* head){ linklist* p=head->pnext; linklist* q=NULL; while(next!=NULL){ q=p->pnext; p->pnext=head->pnext; head->pnext=p; p=pnext; } } /* * function: 快慢指针 * @param [ in] * @param [out] * @return */ void fast_slow_point(linklist* head){ if(head==NULL||head->pnext==NULL){ return; } linklist* fast,slow; fast=slow=head->pnext; while(fast!=NULL||fast->pnext!=NULL){ fast=fast->pnext->pnext; slow=slow->pnext; } printf("中间值:%d\n",(int)slow->param); }
#include "./t2_impl.h" //创建单向循环链表 头结点 lk* create_head_loop_linklist(datatype data){ lk* head=create_node_loop_linklist(); head->data=data; head->next=head; return head; } //创建节点 lk* create_node_loop_linklist(){ lk* node=(lk*)malloc(sizeof(lk)); if(NULL==node){ puts("节点创建失败"); } return node; } //头插 void insert_head_loop_linklist(lk* head,datatype data){ lk* node=create_node_loop_linklist(); node->next=head->next; head->next=node; node->data=data; head->data++; puts("头插成功"); } //尾插 void insert_last_loop_linklist(lk* head,datatype data){ lk* node=create_node_loop_linklist(); lk* temp=head; while(temp->next!=head){ temp=temp->next; } node->next=temp->next; node->data=data; temp->next=node; head->data++; puts("尾插成功"); } //遍历 void print_linklist(lk* head){ lk* temp=head; puts("---------遍历----------"); while(temp->next!=head){ temp=temp->next; printf("%d \n",temp->data); } puts("-----------------------"); } //头删 void delete_head_loop_linklist(lk* head){ lk* temp=head->next->next; free(head->next); head->next=temp; head->data--; puts("头删完成"); } //尾删 void delete_last_loop_linklist(lk* head){ lk* temp=head->next; while(temp->next->next != head){ temp=temp->next; } free(temp->next); temp->next=head; head->data--; puts("尾删完成"); }
部分代码及其结果
乔瑟夫问题:
node* joseph_createNode_linklist(int n){ node* head=NULL; node* temp=NULL; for(int i=1; i<=n; i++){ node* newNode = (node*)malloc(sizeof(node)); newNode->data = i; newNode->next = NULL; if(head == NULL){ head = newNode; temp = head; } else { temp->next = newNode; temp = newNode; } } temp->next = head; return head; } void printList(node* head) { node* temp = head; do { printf("%d ", temp->data); temp = temp->next; } while (temp != head); printf("\n"); } void joseph_linklist(node* head, int n, int k, int m){ node* current = head; node* prev = NULL; int count = 0; for(int i=0; inext; } while(current->next != current) { count++; if(count == m) { printf("Out: %d\n", current->data); prev->next = current->next; count = 0; current = prev->next; } else { prev = current; current = current->next; } } printf("Last: %d\n", current->data); }
还没有评论,来说两句吧...