用头插、尾插、按顺序插入创建一个不带头节点的链表
2014-06-09 16:16
411 查看
#include <stdio.h> #include <stdlib.h> #include <time.h> #define N 10 typedef struct Node { int data; struct Node *next; }Node, *pNode; /*尾插法*/ void create_list_rear(pNode *h) { srand(time(NULL)); pNode p, q; p = q = *h = (pNode)calloc(1,sizeof(Node)); p->next = NULL; int count = 0; while (count!=N){ ++count; if (count == 1){ p->data = rand()%100; printf("%d ", p->data); } else{ p = (pNode)calloc(1, sizeof(Node)); p->data = rand() % 100; printf("%d ",p->data); p->next = NULL; q->next = p; q = p; } } printf("\n"); } /*头插法*/ void create_list_front(pNode *h) { pNode p; p = *h = (pNode)calloc(1,sizeof(Node)); p->next = NULL; int count = 0; while (count != N){ ++count; if (count == 1){ p->data = rand() % 100; printf("%d ", p->data); } else { p = (pNode)calloc(1,sizeof(Node)); p->data = rand() % 100; printf("%d ", p->data); p->next = *h; *h = p; } } printf("\n"); } /*顺序插入法*/ void create_list_sequence(pNode *h) { pNode p, q, r=NULL; p = q = *h = (pNode)calloc(1,sizeof(Node)); p->next = NULL; int count = 0; while (count != N){ ++count; if (count == 1){ p->data = rand()%100; printf("%d ", p->data); } else{ r = (pNode)calloc(1,sizeof(Node)); r->data = rand() % 100; printf("%d ", r->data); p = q = *h; while (p ->next != NULL && p->data < r->data ){ q = p; p = p->next; } if (p->data >= r->data){ if (p == q){ r->next = *h; *h = r; } else { r->next = p; q->next = r; } } else{ p->next = r; r->next = NULL; } } } printf("\n"); } void printList(pNode h) { while (h != NULL){ printf("%d ",h->data); h = h->next; } printf("\n"); } int main() { pNode List = NULL; /*尾插法*/ printf("尾插法:原数列的顺序为:\n"); create_list_rear(&List); printf("链表的顺序为:\n"); printList(List); /*头插法*/ printf("头插法:原数列的顺序为:\n"); create_list_front(&List); printf("链表的顺序为:\n"); printList(List); /*顺序插法*/ printf("顺序插法:原数列的顺序为:\n"); create_list_sequence(&List); printf("链表的顺序为:\n"); printList(List); return 0; }
相关文章推荐
- 用头插、尾插、按顺序插入创建一个不带头节点的链表,栈的基本操作
- 每天一个小程序(2)——带头结点的链表的创建以及插入和删除
- 顺序单链表中插入一个节点
- 创建一个链表、删除一个节点、插入一个节点--实验
- 将两个带头节点链表单链表,合并成一个新的带头节点链表……
- 实现一个 链表 有序插入新节点
- [012]链表笔记--在链表中插入一个节点
- 单向链表中,如何在给定节点前快速插入一个节点?
- 设计一个整型链表类list,能够实现链表节点的插入、删除、以及链表数据的输出操作。
- 链表:创建、清空、插入、添加、删除节点
- 带头节点链表的操作(链表的创建、删除、查找、逆转、打印等等)
- 带头结点头部插入创建链表
- 建立一个带头结点的的单向链表并输出到out53.dat和屏幕上。各节点的值为对应的下表。链表的节点数及输出地文件名作为参数传入
- 向循环有序链表内插入一个节点
- 单向链表小练习--》创建链表头,添加删除链表节点,释放链表内存,选择插入数据
- 借助栈将一个带头节点的单链表倒置
- 2012年7月4日 题:创建一个 10节点 内容随机但不重复的 链表
- malloc的链表,创建链表,遍历链表,插入节点,删除节点
- 创建一个链表,可以插入学生信息、删除学生信息
- 数据结构和算法设计专题之---单链表中在指定的节点前面插入以及删除一个节点