C语言实现链表的创建,初始化,插入,删除,查找
2016-12-04 21:15
806 查看
#include <stdio.h> #include <stdlib.h> #define OK 0 #define ERROR -1 #define MALLOC_ERROR -2 typedef int ElementType; typedef struct node { ElementType data; // 结点的数据 struct node *next; // 结点指针 }Node; typedef Node *PNode; // 重命名结点指针类型 // 头插法创建链表 //int Create_List_Head(struct node ** head, ElementType data) int Create_List_Head(PNode *h, ElementType data) { // 创建一个新的结点 //struct node * node = (struct node *)malloc(sizeof(Node)/sizeof(char)); PNode p = (PNode)malloc(sizeof(Node)/sizeof(char)); if (p == NULL) { return MALLOC_ERROR; } // 将新数据赋给新结点 p->data = data; p->next = *h; *h = p; } // 尾插法创建链表 int Create_List_Tail(PNode *h, ElementType data) { PNode node = (PNode)malloc(sizeof(Node)/sizeof(char)); if (node == NULL) { return MALLOC_ERROR; } node->data = data; node->next = NULL; // 将node加入到链表最后,此处要考虑是否非空表 if (*h == NULL) // 空表 { *h = node; } else // 非空表 { PNode temp = *h; // 找最后一个结点 while (temp->next) { temp = temp->next; } temp->next = node; } return OK; } // 在第 pos 个结点处插入一个数据 int Insert_Node(PNode *h, int pos, ElementType data) { PNode temp = *h; int k=1; // 找第pos-1个结点 while (temp && k < pos-1) { temp=temp->next; k++; } // 非空表 if (temp == NULL && *h != NULL) { printf ("给的位置无效\n"); return ERROR; } // 新建结点 PNode node = (PNode)malloc(sizeof(Node)/sizeof(char)); if (node == NULL) { return MALLOC_ERROR; } node->data = data; // 将结点插入到链表中 if (*h == NULL || pos == 1) // 插在表前 { node->next = *h; *h = node; } else // 插在表中或末尾 { node->next = temp->next; temp->next = node; } return OK; } // 将第 pos 个结点删除 int Delete_Node(PNode *h, int pos) { if (*h == NULL) { printf ("空表,无法删除数据\n"); return ERROR; } PNode p = *h; int k = 1; while (p && k < pos-1) { p = p->next; k++; } if (p == NULL || k >= pos-1) { printf ("无效的结点\n"); return ERROR; } PNode temp = p; if (pos == 1) { *h = p->next; } else { temp = p->next; p->next = temp->next; } free(temp); temp = NULL; return OK; } //链表逆序 int Inverse_List(PNode *h) { //如果是空链表或者只有一个节点的链表默认已经逆序 if (*h == NULL ||(*h)->next == NULL) { return OK; } PNode pre = *h; PNode cur = pre->next; PNode next = NULL; //将各个结点逆序 while (cur) { next = cur->next; cur->next = pre; pre = cur; cur = next; } //处理尾指针和结点 (*h)->next = NULL; *h = pre; return OK; } // 打印 void DisPlay(PNode head) { if (head == NULL) { printf ("该链表是空表!\n"); return; } PNode temp = head; while (temp) { printf ("%4d", temp->data); temp = temp->next; } printf ("\n"); } int main() { PNode head = NULL; // 头插法创建链表 int i = 0; for (i = 0; i < 10; i++) { // 头插法创建链表 /* if (Create_List_Head(&head, i) != OK) { return ERROR; } */ // 尾插法创建链表 if (Create_List_Tail(&head, i) != OK) { return ERROR; } } DisPlay(head); // 在第 pos 个结点处插入一个数据 /* if(Insert_Node(&head, 1, 11) != OK) { return ERROR; } DisPlay(head); */ // 将第 pos 个结点删除 if(Delete_Node(&head, 19) != OK) { return ERROR; } DisPlay(head); return 0; }
相关文章推荐
- 链表的基本操作(创建,查找指定位置元素,删除指定元素,插入,倒置,去重,求集合的差,分别交换结点与交换结点值实现的冒泡排序,将两个有序链表合并成一个有序链表)c语言实现
- c语言:单链表的实现(一) 创建,插入,删除,查找
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- 平衡二叉树的C语言实现(创建、插入、查找、删除、旋转)【数据结构】
- C语言实现二叉查找树(搜索树)的创建,插入,查找,删除
- C++链表的创建、插入、删除、查找、合并、排序、修改等操作的实现
- C语言实现顺序表的初始化,插入,删除,查找
- c语言:顺序表的实现(一) 创建,插入,删除,查找,输出等基本操作实现
- c语言实现单链表建立,插入,删除,查找,循环链表,静态链表
- 循环链表 实现对循环链表的初始化,创建,插入,删除,输出操作
- 链表的初始化、遍历、删除、插入、判断是否为空、求长度 C语言实现
- 链表基本操作(创建,插入,查找,删除)-C语言
- C语言:动态链表的建立,查找,删除,插入功能的实现
- 单链表相关操作之C语言实现:插入,删除,倒转,复制,查找。。。
- c语言实现线性表的建立,初始化,插入,删除,查找,遍历以及时间复杂度分析
- 实现链表的初始化,按值查找,插入,删除
- 实现链表的初始化,按值查找,插入,删除
- 二叉搜索树的创建、插入、删除和查找的C语言实现
- C语言实现二叉搜索树的创建、插入、删除和查找
- java实现创建链表以及插入节点,查找结点,删除节点等操作