链表的简单操作
来源:互联网 发布:原始地貌测量数据 编辑:程序博客网 时间:2024/05/22 06:22
链表的简单操作大致包括:头插法尾插法建立链表,遍历链表,删除添加结点。
#include<stdio.h>#include<malloc.h>typedef struct Node{ int data; struct Node *next;}Node;void print(Node *head) .//遍历链表{ Node *p; p = head; while(p != NULL) { printf("%d ",p->data); p = p->next; } printf("\n"); return ;}Node *create_linklist(int n) //头插法建立链表{ int i; int d; Node *head = NULL,*p; for(i = 0; i < n; i ++) //将新结点插到开头的位置 { scanf("%d",&d); p=(Node *)malloc(sizeof(Node)); p->data = d; p->next = NULL; if(head == NULL) head = p; else { p->next = head; head = p; } } return head;}/*Node *create_linklist(int n) //创建链表 ,尾插法{ Node *head = NULL; Node *p,*last; int d; int i; for(i=0; i<n; i++) { scanf("%d",&d); p = (Node *)malloc(sizeof(Node)); p->data = d; p->next = NULL; if(head == NULL) head = p; else last->next = p; last= p; } return head;}*/Node *insert_node(Node *head,int b) //插入大小为b的结点{ Node *pre1 = head,*pre2,*p; p = (Node *)malloc(sizeof(Node)); p->data = b; if(head == NULL) { head = p; p->next = NULL; } else if(p->data < head->data) { head = p; p->next = pre1; } else { while(pre1 != NULL && p->data >= pre1->data) { pre2 = pre1; pre1 = pre1->next; } p->next = pre1; pre2->next = p; } return head;}Node *delete_node(Node *head ,int b) //删除元素为b的结点{ Node *p,*pre; p = head; if(head == NULL) printf("List is null,delete failed.\n"); else { while(b != p->data && p->next != NULL) { pre = p; p = p->next; } if(b == p->data) { if(p == head) head = p->next; else pre->next = p->next; free(p); } else printf("%d not found,delete fail.\n",b); } return head;}Node *delete_n_node(Node *head,int n) //删除第N个结点{ int i = 1; Node *p,*pre; p = head; if(head == NULL) printf("List is null,delete failed.\n"); else if(n==1) { head == head->next; } else { while(p->next != NULL) { i++; pre = p; p = p->next; if(i == n) break; } if(p ->next == NULL) printf("there is less than %d.\n",n); else pre->next = p->next; free(p); } return head;}Node *insert_n_node(Node *head, int n) //在第N个结点后面插入一个结点{ int b; int i = 0; Node *pre2,*pre1 = head,*p; p = (Node *)malloc(sizeof(Node)); scanf("%d",&b); p->data = b; p->next = NULL; if(n == 0) { head = p; p->next = pre1; } else { while(pre1 != NULL && i != n) { pre2 = pre1; pre1 = pre1->next; i++; } if(i == n) { p->next = pre2->next; pre2->next = p; } else printf("NULL\n"); } return head;}int main(){ int n,b; Node *head = NULL; scanf("%d",&n); head = create_linklist(n); print(head); scanf("%d",&b); head = delete_node(head,b); print(head); scanf("%d",&b); head = insert_node(head,b); print(head); scanf("%d",&n); head = delete_n_node(head,n); print(head); scanf("%d",&n); head = insert_n_node(head,n); print(head); return 0;}
0 0
- 简单链表的操作
- 链表的简单操作
- 链表的简单操作
- 链表的简单操作
- 链表的简单操作
- 链表的简单操作
- 链表的简单操作
- 链表的简单操作
- 线性表-链表的简单操作
- 一个简单的链表操作程序
- 关于链表的简单操作
- 两个简单的链表操作
- 数据结构:链表的简单操作
- C语言 链表的简单操作
- 双向链表的简单操作
- C++ 双向链表的简单操作
- 链表的定义与简单操作
- 链表中文件的简单操作
- 关于Android内存溢出
- 大数据学习路线大纲
- coolreader阅读器分析第一步
- 【京东商城首页实战4】topbanner制作
- 大数据架构:flume-ng+Kafka+Storm+HDFS 实时系统组合
- 链表的简单操作
- gcc 4.8.1 CentOs安装
- jQuery实现在一个输入框按回车键后光标跳到下一个输入框
- 百度地图画多边形代码
- angularjs的实时调用服务 $interval
- 自认为理想的 Android 学习图书阅读路线
- 实现从Excel中导入数据,并将导入的身高体重按性别在图形中以不同颜色区分
- (双指针)leetcode 26、 27、203、283
- angularjs 自定义服务