C语言 数据结构之循环单链表

 单链表的最后一个节点的next部分指向的是头节点

目录

1.单链表的定义

2.初始化

3.头插法

4.尾插法

5.删除

6.打印链表

完整源代码:

1.单链表的定义

typedef struct {
    int data;
    struct Node* next;
}Node;

2.初始化

Node* initList(){
    Node* L = (Node*)malloc(sizeof(Node));
    L->data = 0;//头结点的data表示除头结点外的结点个数
    L->next = L;//此时next指向头结点自身
    return L;
}

3.头插法

void headInsert(Node* L, int data) {
    Node* node = (Node*)malloc(sizeof(Node));
    node->data = data;
    node->next = L->next;
    L->next = node;
    L->data++;
}

4.尾插法

void tailInsert(Node* L, int data) {
    Node* node = (Node*)malloc(sizeof(Node*));
    Node* n = L;
    node->data = data;
    while (n->next != L) {
        n = n->next;
    }
    n->next = node;
    node->next = L;
    L->data++;
}

5.删除

int delete(Node* L, int data) {
    Node* prenode = L;
    Node* node = L->next;
    while (node != L) {
        if (node->data == data){
            prenode->next = node->next;
            L->data--;
            free(node);
            return 1;
            }
        prenode = node;
        node = node->next;
    }
    return 0;
}

6.打印链表

void printList(Node* L) {
    Node* node = (Node*)malloc(sizeof(Node));
    node = L->next;
    while (node != L) {
        printf("%d->", node->data);
        node = node->next;
    }
    printf("以上%d个数循环\n",L->data );
}

完整源代码:

#include<stdio.h>
#include<stdlib.h>
 
typedef struct {
	int data;
	struct Node* next;
}Node;
//初始化一个含头结点的链表
Node* initList(){
	Node* L = (Node*)malloc(sizeof(Node));
	L->data = 0;//头结点的data表示除头结点外的结点个数
	L->next = L;//此时next指向头结点自身
	return L;
}

void headInsert(Node* L, int data) {
	Node* node = (Node*)malloc(sizeof(Node));
	node->data = data;
	node->next = L->next;
	L->next = node;
	L->data++;
}

void tailInsert(Node* L, int data) {
	Node* node = (Node*)malloc(sizeof(Node*));
	Node* n = L;
	node->data = data;
	while (n->next != L) {
		n = n->next;
	}
	n->next = node;
	node->next = L;
	L->data++;
}

int delete(Node* L, int data) {
	Node* prenode = L;
	Node* node = L->next;
	while (node != L) {
		if (node->data == data){
			prenode->next = node->next;
			L->data--;
			free(node);
			return 1;
			}
		prenode = node;
		node = node->next;
	}
	return 0;
}

void printList(Node* L) {
	Node* node = (Node*)malloc(sizeof(Node));
	node = L->next;
	while (node != L) {
		printf("%d->", node->data);
		node = node->next;
	}
	printf("以上%d个数循环\n",L->data );
}

int main() {
	Node* L = initList();
	headInsert(L, 1);
	headInsert(L, 2);
	headInsert(L, 3);
	headInsert(L, 4);
	headInsert(L, 5);
	tailInsert(L, 6);
	tailInsert(L, 7);
	printList(L);
	delete(L, 8);
	printList(L);
	delete(L, 5);
	printList(L);
	return 0;
}

 

 

相关推荐

  1. C语言 数据结构循环

    2024-01-22 22:22:01       31 阅读
  2. C语言数据结构——

    2024-01-22 22:22:01       44 阅读
  3. 数据结构 循环 双向

    2024-01-22 22:22:01       39 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-22 22:22:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-22 22:22:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-22 22:22:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-22 22:22:01       18 阅读

热门阅读

  1. python与c#联合编程简单案例

    2024-01-22 22:22:01       30 阅读
  2. Qt 鼠标进入离开事件

    2024-01-22 22:22:01       36 阅读
  3. 详解FreeRTOS:如何查询任务状态(拓展篇—6)

    2024-01-22 22:22:01       36 阅读
  4. spring boot集成redis,以及配置database不生效问题

    2024-01-22 22:22:01       26 阅读
  5. 从0开始学习C++ 第十二课:指针强化

    2024-01-22 22:22:01       35 阅读
  6. 限制API接口访问速率

    2024-01-22 22:22:01       37 阅读
  7. python 抓包拷贝数据转发

    2024-01-22 22:22:01       33 阅读
  8. Kind 安装 kubernets集群

    2024-01-22 22:22:01       32 阅读
  9. C#单例模式的简单实现

    2024-01-22 22:22:01       27 阅读
  10. cfssl简单使用

    2024-01-22 22:22:01       32 阅读