[置顶] 线性表的链式存储结构(C语言实现)
2017-10-29 23:11
423 查看
由于线性表的顺序存储结构在进行插入与删除是要移动大量的元素,会耗费大量的时间,线性表的链式存储结构就完美的解决了这个问题。
首先是单链表的创建,有头插法和尾插法。
头插法:
2.尾插法:
完整代码:
单链表的插入与删除的关键都是要先找到要操作位置的前一个结点,而插入与删除不同,对于找到第i-1个结点,插入是while (p&&j
首先是单链表的创建,有头插法和尾插法。
头插法:
/* 随机产生n个元素的值,建立带表头结点的单链线性表L(头插法) */ void CreateListHead(LinkList *L, int n) { LinkList p; int i; srand(time(0)); /* 初始化随机数种子 */ *L = (LinkList)malloc(sizeof(Node)); (*L)->next = NULL; /* 先建立一个带头结点的单链表 */ for (i=0; i<n; i++) { p = (LinkList)malloc(sizeof(Node)); /* 生成新结点 */ p->data = rand()%100+1; /* 随机生成100以内的数字 */ p->next = (*L)->next; (*L)->next = p; /* 插入到表头 */ } }
2.尾插法:
/* 随机产生n个元素的值,建立带表头结点的单链线性表L(尾插法) */ void CreateListTail(LinkList *L, int n) { LinkList p,r; int i; srand(time(0)); /* 初始化随机数种子 */ *L = (LinkList)malloc(sizeof(Node)); /* L为整个线性表 */ r=*L; /* r为指向尾部的结点 */ for (i=0; i<n; i++) { p = (Node *)malloc(sizeof(Node)); /* 生成新结点 */ p->data = rand()%100+1; /* 随机生成100以内的数字 */ r->next=p; /* 将表尾终端结点的指针指向新结点 */ r = p; /* 将当前的新结点定义为表尾终端结点 */ } r->next = NULL; /* 表示当前链表结束 */ }
完整代码:
#include<stdio.h> #include<stdlib.h> #include<time.h> typedef struct Node{ int data; struct Node *next; }Node; typedef struct Node *LinkList; /*头插法创建单链表*/ void CreateListHead(LinkList *L, int n){ LinkList p; int i; srand(time(0)); *L = (LinkList)malloc(sizeof(Node)); (*L)->next = NULL; for (i = 0; i < n; i++){ p = (LinkList)malloc(sizeof(Node)); p->data = rand() % 100 + 1; p->next = (*L)->next; (*L)->next = p; } } /*尾插法创建单链表*/ void CreateListTail(LinkList *L, int n){ LinkList p, r; int i; srand(time(0)); *L = (LinkList)malloc(sizeof(Node)); r = *L;//r为指向尾部的结点 for (i = 0; i < n; i++){ p = (LinkList)malloc(sizeof(Node)); p->data = rand() % 100 + 1; r->next = p; r = p; //将p结点赋值给r,使r始终是尾结点 } r->next = NULL; } /*单链表的插入*/ void ListInsert(LinkList *L, int i, int e){ LinkList p,s; p = *L; int j=1; while (p&&j<i) //寻找第i-1个结点 { p = p->next; j++; } if (!p&&j>i)exit(0);//第i个结点不存在 s = (LinkList)malloc(sizeof(Node)); s->data = e; s->next = p->next; p->next = s; } /*单链表的删除*/ void ListDelete(LinkList *L, int i){ LinkList p, q; p = *L; int j = 1; while (p->next&&j<i) //寻找第i-1个结点 { p = p->next; j++; } if (!(p->next) && j>i) exit(0); q = p->next; p->next = q->next; free(q); } void visit(int c){ printf("%d ", c); } void ListPrint(LinkList L){ LinkList p = L->next; while (p) { visit(p->data); p = p->next; } printf("\n"); } int main(){ LinkList m, n; int k = 6; CreateListHead(&m,k); ListPrint(m); CreateListTail(&n, k); ListPrint(n); ListInsert(&m, 5, 11); ListDelete(&n, 3); ListPrint(m); ListPrint(n); system("pause"); return 0; }
单链表的插入与删除的关键都是要先找到要操作位置的前一个结点,而插入与删除不同,对于找到第i-1个结点,插入是while (p&&j
相关文章推荐
- 线性表-链式存储结构(C语言实现)
- 数据结构----纯C语言实现线性表的单向链式存储结构
- [置顶] 线性表的顺序存储结构(C语言实现)
- C语言实现线性表的链式存储结构
- 线性表顺序存储结构的c语言实现
- C语言实现线性表之具体实现
- 线性表的C语言实现
- [置顶] C语言itoa()函数和atoi()函数详解(整数转字符C实现)
- 【数据结构】数据结构C语言的实现(线性表)
- 数据结构 - 线性表(顺序表)C语言代码实现-处理整型数据(附详细解释)。 _清风明月
- [置顶] 【C语言】 实现strstr
- 数据结构C语言之线性表简单实现
- c语言实现最简单的哈希表(开放地址线性探测法)
- [置顶] 【C语言】实现stract函数
- 线性回归,最小二乘法 C语言实现
- 栈的线性储存结构与链式储存结构的实现(C语言)。
- C语言--线性表的顺序存储的实现
- [置顶] c语言实现记事本文件的 DES加密 解密
- 线性表的链式存储实现c语言
- 线性表-顺序存储结构的C语言实现