双向链表
#include "gsj.h"
#include "3_sxlb.h"
DblList* klb_list(){
DblList* head=(DblList*)malloc(sizeof(DblList));
if(NULL==head){
printf("创建失败\n");
return NULL;
}
head->txt.len=0;
head->next =head;
head->prev =head;
memset(head,0,sizeof(DblList));
return head;
}
void tc_list(DblList* head,dataType data){
DblList* temp=(DblList*)malloc(sizeof(DblList));
if(NULL==temp){
printf("节点创建失败\n");
return ;
}
temp->txt.data=data;
temp->next=NULL;
temp->prev=NULL;
if(head->next==NULL){
temp->next=head->next;
head->next=temp;
temp->prev=head;
}else{
head->next->prev=temp;
temp->prev=head;
temp->next=head->next;
head->next=temp;
}
head->txt.len++;
return;
}
void wc_list(DblList* head,dataType data){
DblList* temp=(DblList*)malloc(sizeof(DblList));
if(NULL==temp){
printf("节点创建失败\n");
return ;
}
DblList* p=head;
temp->txt.data=data;
temp->next=NULL;
temp->prev=NULL;
while(p->next!=NULL){
p=p->next;
}
temp->next=p->next;
p->next=temp;
temp->prev=p;
head->txt.len++;
return;
}
void bl_list(DblList* head){
DblList* p=head;
while(p->next!=NULL){
p=p->next;
printf("%d ",p->txt.data);
}
printf("\n");
return;
}
void awzcr_list(DblList* head,dataType data){
DblList* temp=(DblList*)malloc(sizeof(DblList));
if(NULL==temp){
printf("节点创建失败\n");
return;
}
DblList* p=head;
temp->txt.data=data;
temp->next=NULL;
temp->prev=NULL;
int a=0;
printf("输入在第几个数插入数据:");
scanf("%d",&a);
for(int i=0;i<a-1;i++){
p=p->next;
}
if(p->next==NULL){
temp->next=p->next;
p->next=temp;
temp->prev=p;
}else{
p->next->prev=temp;
temp->prev=p;
temp->next=p->next;
p->next=temp;
}
head->txt.len++;
return;
}
dataType ts_list(DblList* head){
if(NULL ==head->next){
printf("链表为空,删除失败\n");
return (dataType)-1;
}
DblList* temp=head->next;
if(NULL=temp->next){
head->next=NULL;
}else{
head->next=temp->next;
temp->next->prev=head;
}
dataType data=temp->txt.data;
free(temp);
head->txt.len--;
return data;
}
dataType ws_list(DblList* head){
if(NULL ==head->next){
printf("链表为空,删除失败\n");
return (dataType)-1;
}
DblList* p=head;
while(p->next!=NULL){
p=p->next;
}
p->prev->next=NULL;
dataType data=p->txt.data;
free(p);
head->txt.len--
return data;
}
dataType awzsc_list(DblList* head){
int a;
printf("输入:");
scanf("%d",&a);
if(a<1 ||a>head->txt.len){
printf("a=%d 要删除的位置错误,删除失败\n",a);
return (dataType)-1;
}
if(NULL ==head->next){
printf("链表为空,删除失败\n");
return (dataType)-1;
}
DblList* temp=head;
for(int i=0;i<a;i++){
temp=temp->next
}
if(temp->next==NULL){
temp->prev->next=NULL;
}else{
temp->prev->next=temp->next;
temp->next->prev=temp->prev;
}
dataType data =temp->txt.data;
free(temp);
head->txt.len--;
return data;
}
单向链表
#include "gsj.h"
#include "03_loop.h"
Loop* create_loop()
{
Loop* head = (Loop*)malloc(sizeof(Loop));
if(NULL == head)
{
printf("创建头结点失败\n");
return NULL;
}
head->txt.len = 0;
head->next = head;
return head;
}
void insert_loop(Loop* head, dataType data)
{
Loop* temp = (Loop*)malloc(sizeof(Loop));
if(NULL == temp)
{
printf("创建新的结点失败,插入失败\n");
return ;
}
temp->txt.data = data;
temp->next = NULL;
Loop* p = head;
while(p->next != head)
{
p = p->next;
}
temp->next = p->next;
p->next = temp;
head->txt.len++;
return;
}
void show_loop(Loop* head)
{
Loop* p = head;
while(p->next != head)
{
p = p->next;
printf("%d ", p->txt.data);
}
putchar(10);
return;
}
dataType delete_loppListRear(Loop* head)
{
if(head == head->next)
{
printf("链表为空,删除失败\n");
return (dataType)-1;
}
Loop* p = head;
while(p->next->next != head)
{
p = p->next;
}
dataType data = p->next->txt.data;
free(p->next);
p->next = head;
head->txt.len--;
return data;
}
joseph(约瑟夫)问题
#include <stdio.h>
#include <stdlib.h>
struct Node {
int data;
struct Node* next;
};
void josephus(int n, int k, int m) {
struct Node* head = (struct Node*)malloc(sizeof(struct Node));
head->data = 1;
head->next = NULL;
struct Node* p = head;
for (int i = 2; i <= n; i++) {
struct Node* node = (struct Node*)malloc(sizeof(struct Node));
node->data = i;
node->next = NULL;
p->next = node;
p = node;
}
p->next = head;
int count = 0;
struct Node* q = p = head;
while (q != p) {
for (int i = 1; i < k; i++) {
p = p->next;
}
q = p->next;
count++;
if (count == m) {
fprintf(fp, "%d ", q->data);
p->next = q->next;
free(q);
count = 0;
} else {
q = q->next;
}
p = p->next;
}
}
int main() {
int n = 8, k = 3, m = 4;
josephus(n, k, m);
return 0;
}