链表c代码

#include <stdio.h>
#include <stdlib.h>

struct node {
	int data;
	struct node *next;
};

int datas[] = {1, 2, 4, 8, 16, 32, 64, 128};

void list_head_init(struct node *head)
{
	head->data = 0;
	head->next = NULL;
}

int  list_empty(struct node *head)
{
	return head->next == NULL;
}

void list_add_tail(struct node *new, struct node *head)
{
	struct node *p = head;

	while (p->next) {
		p = p->next;
	}
	p->next = new;
}

void list_del(struct node *head)
{
	struct node *p = head->next;

	if (list_empty(head)) return;

	head->next = p->next;
	free(p);
}

void list_destroy(struct node *head)
{
	while (head->next)
		list_del(head);
}

void list_create(struct node *head)
{
	struct node *new;
	int i;

	for (i = 0; i < sizeof(datas) / sizeof(datas[0]); i++) {
		new = (struct node *)malloc(sizeof(struct node));
		new->data = datas[i];
		new->next = NULL;

		list_add_tail(new, head);
	}
}

void list_dump(struct node *head)
{
	struct node *p = head->next;

	while (p) {
		printf("%8d", p->data);
		p = p->next;
	}
	printf("\n");
}

int main(void)
{
	struct node root, *head = &root;

	list_head_init(head);

	list_create(head);
	list_dump(head);

	list_destroy(head);

	return 0;
}	


注意:插入在链表的尾部,删除在链表的头部,这个链表相当于就是一个链式队列。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
线性链表是一种常见的数据结构,它由一系列的节点组成,每个节点包含数据和指向下一个节点的指针。下面是一个用C语言实现的线性链表代码示例: ```c #include <stdio.h> #include <stdlib.h> // 定义节点结构 typedef struct Node { int data; struct Node* next; } Node; // 创建链表 Node* createLinkedList() { Node* head = (Node*)malloc(sizeof(Node)); head->next = NULL; return head; } // 在链表末尾插入节点 void insert(Node* head, int data) { Node* newNode = (Node*)malloc(sizeof(Node)); newNode->data = data; newNode->next = NULL; Node* current = head; while (current->next != NULL) { current = current->next; } current->next = newNode; } // 在链表指定位置插入节点 void insertAt(Node* head, int data, int position) { Node* newNode = (Node*)malloc(sizeof(Node)); newNode->data = data; Node* current = head; int i = 0; while (current->next != NULL && i < position - 1) { current = current->next; i++; } newNode->next = current->next; current->next = newNode; } // 删除链表指定位置的节点 void deleteAt(Node* head, int position) { Node* current = head; int i = 0; while (current->next != NULL && i < position - 1) { current = current->next; i++; } if (current->next != NULL) { Node* temp = current->next; current->next = temp->next; free(temp); } } // 输出链表中的所有节点 void display(Node* head) { Node* current = head->next; while (current != NULL) { printf("%d ", current->data); current = current->next; } printf("\n"); } int main() { Node* myList = createLinkedList(); // 插入节点 insert(myList, 1); insert(myList, 3); insert(myList, 5); insert(myList, 7); // 在指定位置插入节点 insertAt(myList, 9, 2); // 删除指定位置的节点 deleteAt(myList, 3); // 输出链表 display(myList); return 0; } ``` 以上代码实现了线性链表的基本操作,包括创建链表、在链表末尾插入节点、在指定位置插入节点、删除指定位置的节点,以及输出链表中的所有节点。使用这些操作可以对线性链表进行增删改查等操作。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值