头指针链表实现机制
来源:互联网 发布:顶尖数据恢复软件 编辑:程序博客网 时间:2024/06/05 05:38
#include <stdio.h>#include <stdlib.h>#define TRUE 1#define FALSE 0typedef int LinkData; // 链表的数据类型typedef struct _node{LinkData data; // 链表的数据struct _node *next; // 指向链表下一个结点的指针}Node;// 链表的头插int Insert_Head(Node **h, LinkData data){if (h == NULL)return FALSE;// 创建新节点Node* node = (Node*)malloc(sizeof(Node)/sizeof(char));if (node == NULL){return FALSE;}// 给结点成员变量赋值node->data = data;node->next = *h;// 让新节点变为链表的第一个结点*h = node;return TRUE;}// 尾插int Insert_Last(Node **h, LinkData data){if (h == NULL){return FALSE;}// 创建新节点Node* node = (Node*)malloc(sizeof(Node)/sizeof(char));if (node == NULL){return FALSE;}// 给结点成员变量赋值node->data = data;node->next = NULL;// 找最后一个结点Node * tmp = *h; // 指向第一个结点if (tmp == NULL) // 空表{*h = node;}else{while (tmp->next){tmp = tmp->next;}tmp->next = node;}return TRUE;}// 在第 pos 个节点处插入数据,链表结点从1开始,没有第0个结点int Insert_Pos (Node** h, int pos, LinkData data){if (h == NULL || pos < 1)return FALSE;// 创建新节点Node* node = (Node*)malloc(sizeof(Node)/sizeof(char));if (node == NULL){return FALSE;}// 给结点成员变量赋值node->data = data;// 空表的状态下,只能插入在第一个结点处if (*h == NULL) {if (pos != 1){printf ("当前为空表,无法在第 %d 结点处插入数据\n", pos);free(node);return FALSE;}node->next = NULL;*h = node;}else // 非空表,需要找到插入位置的前一个结点{if (pos == 1){node->next = *h;*h = node;}else{int i;Node *tmp = *h; // tmp 开始的时候指向第一个结点for (i = 0; i < pos-2; i++){if (tmp == NULL) // 如果 pos 太大,会造成越界break;tmp = tmp->next;}if (tmp == NULL){printf ("插入位置越界\n");free(node);return FALSE;}node->next = tmp->next;tmp->next = node;}}return TRUE;}int Delete_Pos(Node** h, int pos){if (h == NULL || *h == NULL || pos < 1)return FALSE;Node *tmp = *h;if (pos == 1){*h = tmp->next;free(tmp);}else{int i;for (i = 0; i < pos-2; i++){if (tmp->next == NULL) // 如果 pos 太大,会造成越界break;tmp = tmp->next;}if (tmp->next == NULL){printf ("删除位置越界\n");return FALSE;}Node* p = tmp->next;tmp->next = p->next;free(p);}return TRUE;}int Reverse_List(Node **h){// *h == NULL 空表 (*h)->next == NULL 只有一个元素if (h == NULL || *h == NULL || (*h)->next == NULL)return FALSE;Node *pre = *h;Node *cur = (*h)->next;Node *tmp;while (cur){tmp = cur->next;cur->next = pre;pre = cur;cur = tmp;}(*h)->next = NULL;*h = pre;return TRUE;}void Display(Node *h){if (h == NULL)return;int count = 0;while (h){if (count++ % 4 == 0)printf ("\n");printf ("%8d", h->data);h = h->next;}printf ("\n");}int main(){Node * head = NULL; // 指向链表第一个结点的指针(头指针)// 插入元素int i;for (i = 0; i < 10; i++){//Insert_Head(&head, i);Insert_Last(&head, i);}#if 0Insert_Pos(&head, 1, 1000);Insert_Pos(&head, 10, 2000);Insert_Pos(&head, 13, 3000);Insert_Pos(&head, 15, 3000);Insert_Pos(&head, 0, 1000);#endif//Delete_Pos(&head, 11);Display(head);Reverse_List(&head);Display(head);return 0;}
阅读全文
0 0
- 头指针链表实现机制
- 头指针链表
- 头指针链表
- 链表的 头指针 头结点
- 链表之头指针
- 数据结构头指针链表
- (含头指针以及尾指针)循环双向链表各类功能的实现
- 线性链表中的头结点和头指针
- 初学单向链表中的头结点与头指针
- 链表中的头指针和头节点
- c语言链表 头指针
- 头指针链表C程序
- 干货2:头指针链表
- C语言 头指针链表
- 双循环链表(包含头指针与尾指针)
- 顺序表,头结点链表,头指针链表,头结点循环链表
- 数据结构-线性表-头指针&头结点
- 数据结构-线性表-头指针&头结点
- 数据类型对应的字符数
- STM32输入捕获模式
- Git bash 基本使用及常用命令
- 集成学习之Bootstrap aggregating(Bagging)装袋算法
- shiro
- 头指针链表实现机制
- 十一.发布(本地仓库或者远程仓库)
- 大话数据结构 code第五章 构实现_BiTreeArray
- UVa202-Repeating Decimals
- C语言 链式队列
- atoi函数的实现
- mysql存储过程——游标
- 【英语】--闲散的时光
- JDBC的封装