链表的简单操作
2017-05-02 13:39
127 查看
链表的简单操作大致包括:头插法尾插法建立链表,遍历链表,删除添加结点。
#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; }
相关文章推荐
- 关于链表的简单操作
- 链表的简单操作
- 单链表基本操作的简单实现
- 链表的简单操作
- 链表的简单操作
- 一个简单的链表操作程序
- (C语言版)链表(四)——实现双向循环链表创建、插入、删除、释放内存等简单操作
- 简单链表操作
- C语言 链表的简单操作
- (C语言版)链表(二)——实现单向循环链表创建、插入、删除、释放内存等简单操作
- 两个简单的链表操作
- 2.简单链表操作_C语言
- 数据结构:链表的简单操作
- 【数据结构上机练习】4.链表的简单操作(2)
- 链表实现简单操作
- 简单链表的操作
- 链表的简单操作
- 数据结构之链表与数组(三)-单向链表上的简单操作
- 数据结构之链表与数组(二) -单向链表上的简单操作问题
- (C语言版)链表(三)——实现双向链表创建、删除、插入、释放内存等简单操作