单链表的创建(头插法尾插法),插入,删除
2016-03-09 20:28
417 查看
<span style="font-size:18px;">#include <iostream> #include <cstdio> #include <stdlib.h> using namespace std; typedef int ElemType; typedef struct Node { ElemType data; struct Node *next; }Node,*LinkedList; //把struct Node *定义为新类型LinkList,是一个结构体的指针。 void InitLinkedList() { Node *L; L=(Node *)malloc(sizeof(Node)); if(L==NULL) printf("申请空间失败"); L->next = NULL; } LinkedList CreateLinkedListHead(int n)//头插法 { int i; int x; Node *L; L=(Node *)malloc(sizeof(Node)); L->next = NULL; printf("输入元素:"); for(i=0;i<n;i++) { Node *p; p=(Node *)malloc(sizeof(Node)); scanf("%d",&x); p->data = x; p->next = L->next; L->next = p; } return L; } LinkedList CreateLinkedListTail(int n)//尾插法 { int x; Node *L; L=(Node *)malloc(sizeof(Node)); L->next = NULL; Node *r; r=L; printf("输入元素:"); while(n--) { scanf("%d",&x); Node *p; p=(Node *)malloc(sizeof(Node)); p->data = x; r->next = p; r=p; } r->next = NULL; return L; } void InsertLinkedList(LinkedList L,int i,ElemType x)//插入元素 { LinkedList p; p=L; int j; j=1; while(j<i) { p=p->next; j++; } Node *s; s=(Node *)malloc(sizeof(Node)); s->data = x; s->next = p->next; p->next = s; } void output(LinkedList L) { Node *p; for(p=L->next;p!=NULL;p=p->next) { printf("%d",p->data); } } void deleteLinkedList(LinkedList L,int i)//删除i位置上的元素 { int j; LinkedList p,q; p=L; j=1; while(j<i) { p=p->next; j++; } q=p->next; p->next = p->next->next; free(q); } int GetElem(LinkedList L,int i)//获取元素 { ElemType e; int j; LinkedList p; p=L->next; j=1; while(p && j<i) { p=p->next; j++; } if(!p || j>i) printf("第%d个节点不存在\n",i); e=p->data; return e; } void ClearList(LinkedList L) { LinkedList p,q; p=L->next; while(p) { q=p->next; free(p); p=q; } L->next=NULL; } int main() { int n; int i; int x; LinkedList H; printf("输入单链表的长度(头插法):"); scanf("%d",&n); H=CreateLinkedListHead(n); output(H); printf("\n"); printf("输入单链表的长度(尾插法):"); scanf("%d",&n); H=CreateLinkedListTail(n); output(H); printf("\n"); printf("输入要获取哪一位置的元素:"); scanf("%d",&i); printf("%d\n",GetElem(H,i)); printf("输入要插入的元素e与位置i:"); scanf("%d %d",&x,&i); InsertLinkedList(H,i,x); output(H); printf("\n"); printf("输入要删除哪一位置上的元素:"); scanf("%d",&i); deleteLinkedList(H,i); output(H); printf("\n是否要整表删除1/0?\n"); scanf("%d",&x); if(x==1) { ClearList(H); printf("单链表为:"); output(H); }else { printf("单链表仍为:"); output(H); } return 0; } </span>
<span style="font-size:18px;">顺序存储结构与单链表结构的区别:</span>
<span style="font-size:18px;">顺序存储结构是用一段连续的存储单元存储的,而单链表是用离散的存储单元存储的。</span>
<span style="font-size:18px;">顺序存储结构适用于频繁的进行查找操作,而很少进行插入删除操作。</span>
<span style="font-size:18px;">当要频繁的进行插入删除操作时,就要选取单链表结构。</span>
<span style="font-size:18px;">顺序存取结构需要预先申请空间。而单链表不需要,元素个数也不受限制。</span>
相关文章推荐
- 使用Eclipse签名打包,项目出现错误怎么办?
- 深入浅出MySQL事务处理和锁机制
- python学习笔记:python对象
- 把书《CUDA By Example an Introduction to General Purpose GPU Programming》读薄
- 匈牙利命名法收藏
- 1079. Total Sales of Supply Chain (25)
- 离线更新VSAN HCL数据库
- C++ list 初识
- 用PHP实现n的阶乘--高精度算法
- 指针相关知识点
- 更改数据库表名
- java 模拟登陆正方教务系统
- 2016年3月7日中项作业
- 杭电5615 Jam's math problem
- windows下gun-gcc的一些编译参数
- uboot中常见烧写命令总结
- struts 点击jar包中的文件Path must include project and resource name: /struts-default.xml
- 删除算法3 unique 将连续相同的数删除
- Discrete.Differential.Geometry-An.Applied.Introduction(sig2008)笔记
- ThinkPHP上传返回 “文件上传保存错误!”