【自己动手写数据结构】 -- 单链表的实现

来源:互联网 发布:网络安全法第27条规定 编辑:程序博客网 时间:2024/04/30 16:38


/* * 线性表的链式存储结构 */#include<stdio.h>#include<malloc.h>#include<stdlib.h>typedef int datatype;typedef struct Node{datatype info;struct Node *next;}Node;Node *head = NULL;//为了方便在链表的尾部插入元素,用tail指针指向链表最后一个结点Node *tail = NULL;//记录链表存储元素的个数int size;/* * 链表的初始化 */void init() {//动态申请一个结点,该结点不存储数据//作用:当链表长度为0时,head和tail指向该结点head = tail = malloc(sizeof(Node));head->next = tail->next = NULL;size = 0;}/* * 在链表的尾部插入一个元素 */void append(datatype elem) {Node *node = NULL;node = malloc(sizeof(Node));node->info = elem;node->next = NULL;tail->next = node;tail = node;size++;}/* * 在链表的第i个结点处插入一个元素 */void insert(int i, datatype elem) {if(i < 0 || i > size) {printf("下标i不合法!");exit(1);}Node *p = head;for(int j = 0; j < i; j++) {p = p->next;}Node *node = malloc(sizeof(Node));node->info = elem;Node *q = p->next;if(q == NULL) {tail = node;}node->next = q;p->next  = node;size++;}/* * 在链表中查找第i个结点的值 */datatype get(int i) {if(i < 0 || i >= size) {printf("下标i不合法");exit(1);}Node *p = head;for(int j = 0; j < i; j++) {p = p->next;}return p->next->info;}/* * 在链表中删除第i个结点 */void delete(int i) {if(i < 0 || i >= size) {printf("下标i不合法");exit(1);}Node *p = head;for(int j = 0; j < i; j++) {p = p->next;}Node *cur = p->next;if(cur == tail) {tail = p;}p->next = cur->next;size--;}/* * 打印出线性表中的每个元素 */void printList() {Node *p = head;if(size == 0) {printf("单链表是空的!\n");}else {p = p->next;while(p != NULL) {printf("%d ", p->info);p = p->next;}}printf("\n");}














原创粉丝点击