2024.8.3-8.4数据结构作业

1.单向链表

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Linklist.h"

Linklist* creat_linklist(void)
{
	Linklist* head=(Linklist*)malloc(sizeof(Linklist));
	if(head==NULL)
	{
		printf("创建结点失败\n");
	}
	head->next=NULL;
	return head;
}

void insert_linklist(Linklist* head,int num)
{
	Linklist* temp=(Linklist*)malloc(sizeof(Linklist));
	if(temp==NULL)
	{
		printf("创建结点失败\n");
		return;
	}
	temp->test.data =num;
	temp->next =NULL;

	temp->next = head->next;
	head->next = temp;
	head->test.len++;
	return;
}
void show_linklist(Linklist* head)
{
Linklist *p=head;
int a=head->test.len;
int b=0;
while(p->next!=NULL)
{
	p=p->next;
	printf("%d\n",p->test.data);
}
printf("%d\n",head->test.len);
printf("结束\n");
}

void delect_Head(Linklist* head)
{
if(head->next==NULL)
{
	printf("链表为空");
	return;
}
Linklist* temp=head->next;
head->next=head->next->next;
free(temp);
temp=NULL;
head->test.len--;
}

void insert_tail(Linklist* head,int num)
{
Linklist* temp=(Linklist*)malloc(sizeof(Linklist));
if(temp==NULL)
{
	printf("创建结点失败\n");
	return;
}
temp->test.data=num;
temp->next=NULL;


if(head->next==NULL)
{
	head->next=temp;
}
else
{
	Linklist* p=head->next;
	while(p->next!=NULL)
	{
		p=p->next;
	}
	p->next=temp;
}
head->test.len++;
}

void delect_tail(Linklist* head)
{
if(head->next==NULL)
{
	printf("链表为空");
	return;
}
Linklist* p=head->next;
if(p->next==NULL)
{
	head->next=NULL;
	free(p);
	p=NULL;
	head->test.len--;
	return;
}
while(p->next->next!=NULL)
{
	p=p->next;
}
free(p->next);
p->next=NULL;
head->test.len--;
}

void insert_position(Linklist* head,int number,int num)
{
Linklist* temp=(Linklist*)malloc(sizeof(Linklist));
if(temp==NULL)
{
	printf("创建结点失败\n");
	return;
}
if(number>head->test.len)
{
	printf("插入位置错误\n");
	return;
}
temp->test.data=num;
temp->next=NULL;
Linklist* p=head;
for(int i=0;i<number-1;i++)
{
	p=p->next;
}
temp->next=p->next;
p->next=temp;
head->test.len++;
}

void delect_position(Linklist* head,int number)
{
	if(head->next==NULL)
	{
		printf("链表为空");
		return;
	}
	if(number>head->test.len)
	{
		printf("删除位置错误\n");
		return;
	}
	Linklist* p;
	head->test.len--;
	for(int i=0;i<number-1;i++)
	{
		head=head->next;
	}
	p=head->next;
	head->next=head->next->next;
	free(p);
	p=NULL;
}

// void insert_sort(Linklist* head,int num)
// {
// Linklist *temp=(Linklist*)malloc(sizeof(Linklist));
// if(temp==0)
// {
// 	printf("创建节点失败\n");
// }
// temp->next=NULL;
// temp->test.data=num;
// temp->next=head->next;
// head->next=temp;
// head->test.len++;
// Linklist* p;
// p->next=head->next;
// int max=head->test.data;
// while(head->next!=NULL)
// {
// head=head->next;
// if(max<head->next->test.data)
// {
// max=head->next->test.data;
// }
// }
// }


void recycle_linklist(Linklist* head)
{
	Linklist*p =NULL;
	Linklist* head1=creat_linklist();
	while(head->next!=NULL)
	{
		p=head->next;
		head->next=p->next;
		p->next=head1->next;
		head1->next=p;
	}
	head->next=head1->next;
	free(head1);
	head1=NULL;
}

// void loop(Linklist* head)
// {
// 	Linklist* p=head;
// 	while(p->next!=NULL)
// 	{
// 		p=p->next;
// 	}
// 	p->next=head;

// }

// void loop_insert_head(Linklist* head,int num)
// {
// 	Linklist* p=head;
// 	while(p->next!=NULL)
// 	{
// 		p=p->next;
// 	}
// 	Linklist* temp=(Linklist*)malloc(sizeof(Linklist));
// 	if(temp==NULL)
// 	{
// 		printf("创建结点失败\n");
// 		return;
// 	}
// 	temp=NULL;
// 	temp->test.data=num;
// 	temp->next=head;
// 	p->next=temp;
// 	head->test.len++;
// }

#include<stdio.h>
#include<stdlib.h>
#include"Linklist.h"
int main()
{
	Linklist* head=creat_linklist();
	insert_linklist(head,50);
	insert_linklist(head,60);
	insert_linklist(head,70);
	show_linklist(head);
	delect_Head(head);
	show_linklist(head); 
	insert_tail(head,80);
	insert_tail(head,90);
	insert_tail(head,100);
	show_linklist(head);
	delect_tail(head);
	show_linklist(head);
	insert_position(head,5,110);
	show_linklist(head);
	delect_position(head,5);
	show_linklist(head);
	// insert_sort(head,120);
	// show_linklist(head);
	recycle_linklist(head);
	show_linklist(head);
	// loop(head);
	loop_insert_head(head,150);
	show_linklist(head);
}
#ifndef _LINKLIST_
#define _LINKLIST_

typedef struct linklist 
{
	union
	{
		int data;
		int len;
	}test;
    struct linklist* next;
}Linklist;
Linklist* creat_linklist(void);
void insert_linklist(Linklist* head,int num);
void show_linklist(Linklist* p);
void delect_Head(Linklist* head);
void delect_tail(Linklist* head);
void insert_tail(Linklist* head,int num);
void insert_position(Linklist* head,int number,int num);
void delect_position(Linklist* head,int number);
void insert_sort(Linklist* head,int num);
void recycle_linklist(Linklist* head);
void loop(Linklist* head);
void loop_insert_head(Linklist* head,int num);
#endif

单向循环链表 

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "DLinklist.h"

Linklist* creat_linklist(void)
{
	Linklist* head=(Linklist*)malloc(sizeof(Linklist));
	if(head==NULL)
	{
		printf("创建结点失败\n");
	}
	head->next=NULL;
    head->next=head;
	return head;
}

void loop_insert_head(Linklist* head,int num)
{
	Linklist* temp=(Linklist*)malloc(sizeof(Linklist));
	if(temp==NULL)
	{
		printf("创建结点失败\n");
		return;
	}
	temp->test.data=num;
	temp->next=NULL;
    temp->next=head->next;
    head->next=temp;
	head->test.len++;
}

void loop_insert_tail(Linklist* head,int num)
{
    Linklist* p=head;
	while(p->next!=head)
	{
		p=p->next;
	}
	Linklist* temp=(Linklist*)malloc(sizeof(Linklist));
	if(temp==NULL)
	{
		printf("创建结点失败\n");
		return;
	}
    temp->test.data=num;
    temp->next=head;
    p->next=temp;
    head->test.len++;
}

void loop_delete_head(Linklist* head)
{
    if(head->next==head)
{
    printf("空链表\n");
}
    Linklist* temp=head->next;
    head->next=head->next->next;
    free(temp);
    head->test.len--;
}

void loop_delete_tail(Linklist* head)
{
    Linklist* p=head;
    while(p->next->next!=head)
    {
        p=p->next;
    }
    Linklist* temp=p->next;
    p->next=head;
    free(temp);
    head->test.len--;
}

void show_linklist(Linklist* head)
{
Linklist *p=head;
while(p->next!=head)
{
	p=p->next;
	printf("%d\n",p->test.data);
}
printf("结束\n");
}
#ifndef _LINKLIST_
#define _LINKLIST_

typedef struct linklist 
{
	union
	{
		int data;
		int len;
	}test;
    struct linklist* next;
}Linklist;
Linklist* creat_linklist(void);
void loop_insert_head(Linklist* head,int num);
void show_linklist(Linklist* head);
void loop_insert_tail(Linklist* head,int num);
void loop_delete_head(Linklist* head);
void loop_delete_tail(Linklist* head);
#endif

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "DLinklist.h"

int main()
{
    Linklist *head=creat_linklist();
    loop_insert_head(head,1);
    loop_insert_head(head,2);
    loop_insert_head(head,3);
    show_linklist(head);
    loop_insert_tail(head,4);
    loop_insert_tail(head,5);
    loop_insert_tail(head,6);
    show_linklist(head);
    loop_delete_head(head);
    show_linklist(head);
    loop_delete_tail(head);
    show_linklist(head);
}

3.双向链表

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Dloop.h"

Linklist* creat_linklist(void)
{
	Linklist* head=(Linklist*)malloc(sizeof(Linklist));
	if(head==NULL)
	{
		printf("创建结点失败\n");
	}
	head->next=NULL;
    head->prev=NULL;
	return head;
}

void insert_linklist_head(Linklist* head,int num)
{
    Linklist* temp=(Linklist*)malloc(sizeof(Linklist));
    if(temp==NULL)
    {
        printf("创建节点失败");
        return;
    }
    temp->test.data=num;
    temp->next=NULL;
    temp->prev=NULL;

    temp->next=head->next;
    head->next=temp;

    temp->prev=head;
    if(temp->next!=NULL)
    {
        temp->next->prev=temp;
    }
    head->test.len++;
}

void insert_linklist_tail(Linklist* head,int num)
{
    Linklist* temp=(Linklist*)malloc(sizeof(Linklist));
    if(temp==NULL)
    {
        printf("创建节点失败");
        return;
    }
    Linklist* p=head;
    while(p->next!=NULL)
    {
        p=p->next;
    }
    temp->test.data=num;
    temp->next=NULL;
    temp->prev=NULL;
    p->next=temp;
    temp->prev=p;
    head->test.len++;
}

void show_linklist(Linklist* head)
{
    Linklist* p=head->next;
    while(p!=NULL)
    {
        printf("%d ",p->test.data);
        p=p->next;
    }
    printf("完成\n");
}

void delete_linklist_head(Linklist* head)
{
    Linklist* p=head->next;
    if(head->next==NULL)
    {
        printf("链表为空\n");
        return;
    }
    head->next->next->prev=head;
    head->next=head->next->next;
    free(p);
    head->test.len--;
}
void delete_linklist_tail(Linklist* head)
{
    Linklist* p=head->next;
    if(head->next==NULL)
    {        
        printf("链表为空\n");
        return;
    }
    while(p->next!=NULL)
    {
        p=p->next;
    }
    p->prev->next=NULL;
    free(p);
    head->test.len--;
}
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "Dloop.h"

int main()
{
    Linklist *head = creat_linklist();
    insert_linklist_head(head,1);
    insert_linklist_head(head,2);
    insert_linklist_head(head,3);
    show_linklist(head);
    insert_linklist_tail(head,4);
    insert_linklist_tail(head,5);
    insert_linklist_tail(head,6);
    show_linklist(head);
    delete_linklist_head(head);
    show_linklist(head);
    delete_linklist_tail(head);
    show_linklist(head);
}

#ifndef _LINKLIST_
#define _LINKLIST_

typedef struct linklist 
{
	union
	{
		int data;
		int len;
	}test;
    struct linklist* next;
    struct linklist* prev;
}Linklist;
Linklist* creat_linklist(void);
void insert_linklist_head(Linklist* head,int num);
void insert_linklist_tail(Linklist* head,int num);
void show_linklist(Linklist* head);
void delete_linklist_head(Linklist* head);
void delete_linklist_tail(Linklist* head);
#endif

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值