发布时间:2025年09月27日 作者:zzcha.cn
?找创新互联建站!专注于网页设计、网站建设、网站设计、网站制作、网站开发、html5、小程序开发等。专业建站公司,进行网站建设,网站价格,合理价格,网站设计,网站全面营销,适合各类企业使用。欢迎来电咨询:028-86922220## 如何用C语言编写一个链表?可以用结构体和指针来实现定义:定义一个单个元素的结构typedef struct Chain_tag { \/\/ 这里用typedef来定义,方便使用int data; \/\/ 这里的数据可以是任意类型\/\/其他数据struct Chain_tag *prev, *next;\/\/ 由于Chain为不完全类型,故只能用指针的方式声明} Chain;使用:用单个结构体的指针作为headChain *head;head = NULL; \/\/ 链表为空时head==NULL创建链表:根据输入的长度len和每个元素的数值data,创建链表,并返回链头指针Chain *create_chain(int len, int *data){Chain *head, *p, *q;int i;if (len = 0)return NULL;\/\/ 创建第一个元素head = (Chain*) malloc(sizeof(Chain));head-data = data[0];head-prev = NULL;head-next = NULL;p = head;\/\/ 创建后续元素for (i = 1; i len; i++) {q = (Chain*) malloc(sizeof(Chain));q-data = data[i];q-prev = p;q-next = NULL;p-next = q;p = q;}return head;}插入元素:在链表的第loc个元素前插入一个元素,值为data。如果loc为0则插入在链表开头,若loc大于链表长度则插入末尾Chain *insert_chain(Chain *head, int loc, int data){Chain *p, *q, *r;int i;\/\/ 判断链表是否为空if (head == NULL)return NULL;\/\/ 创建插入的元素r = (Chain*) malloc(sizeof(Chain));r-data = data;r-prev = NULL;r-next = NULL;\/\/ 插入在开头if (loc = 0) {r-next = head;head-prev = r;head = r;return head;}p = head;for (i = 1; i loc; i++) { \/\/ 移动到第loc个元素处p = p-next;if (p == NULL) {printf(\reach the end of the chain.\\);break;}}\/\/ 插入在末尾if (p == NULL || p-next == NULL) {p-next = r;r-prev = p;return head;}\/\/ 插入在中间q = p-next;r-prev = p;r-next = q;p-next = r;q-prev = r;return head;}删除元素:删除链表的第loc个元素Chain *delete_chain(Chain *head, int loc){Chain *p, *q, *r;int i;\/\/ 判断链表是否为空if (head == NULL)return NULL;\/\/ 移动到第loc个元素p = head;for (i = 0; i loc; i++) {p = p-next;if (p == NULL) {printf(\reach the end of the chain.\\);break;}}\/\/ 删除第一个元素if (p == head) {head = head-next;head-prev = NULL;free(p);return head;}\/\/ 删除最后一个元素if (p-next == NULL) {p-prev-next = NULL;free(p);return head;}\/\/ 删除中间元素q = p-prev;r = p-next;q-next = r;r-prev = q;free(p);return head;}打印链表:顺序打印链表中各元素void print_chain(Chain *head){Chain *p;p = head;while (p != NULL) {printf(\%d \, p-data);p = p-next;}printf(\\\);}测试代码:int main(){Chain *head;int data[5] = {1, 2, 3, 4, 5};head = create_chain(5, data);print_chain(head);head = insert_chain(head, 0, 0);print_chain(head);head = insert_chain(head, 3, 6);print_chain(head);head = insert_chain(head, 8, 7);print_chain(head);head = delete_chain(head, 0);print_chain(head);head = delete_chain(head, 3);print_chain(head);head = delete_chain(head, 5);print_chain(head);return 0;}## C语言链表的使用方法#include stdio.h#include stdlib.htypedef struct node