每天一个小程序(2)——带头结点的链表的创建以及插入和删除
来源:互联网 发布:怎样学好js 编辑:程序博客网 时间:2024/05/16 05:10
#include<stdio.h>#include<stdlib.h>typedef int datatype;typedef struct lnode{datatype data;struct lnode *next;}LNode,*LinkList;int flag = -1;LinkList Create_Head(){LinkList head;head = (LinkList)malloc(sizeof(LNode));head->next = NULL;return head;}LinkList Create_LinkList1()//带头结点 头插法{LinkList s,L;int x;L = Create_Head();scanf("%d",&x);while(x != flag){s = (LinkList)malloc(sizeof(LNode));s->data = x;s->next = L->next;L->next = s;scanf("%d",&x);}return L;}LinkList Create_LinkList2()//带头结点 尾插法{LinkList s,L,r;int x;L = Create_Head();r = L;scanf("%d",&x);while(x != flag){s = (LinkList)malloc(sizeof(LNode));s->data = x;s->next = NULL;r->next = s;r = s;scanf("%d",&x);}return L;}LNode * Get_LinkList(LinkList L,int i){LNode * p = L->next;int j = 0;while(p->next != NULL && j < i){p = p->next;j++;}if(j == i)return p;elsereturn NULL;}int Insert_LinkList(LinkList L,int i,datatype x){LNode *p,*s;p = Get_LinkList(L,i-1);if(p == NULL){printf("参数i错误");return 0;}else{s = (LNode*)malloc(sizeof(LNode));s->data = x;s->next = p->next;p->next = s;return 1;}}int Length_LinkList2(LinkList L)//不带头结点求表长{LNode *p = L->next;int j = 0;while(p){j++;p = p->next;}return j;}void print(LinkList L){LinkList p = L->next;while(p){printf("%d ",p->data);p = p->next;}int len = Length_LinkList2(L);printf("\nLength = %d\n",len); }int Del_LinkList(LinkList L,int i){LinkList p,s;p = Get_LinkList(L,i-1);if(p == NULL){printf("第%d个节点不存在",i-1);return -1;}else if(p->next == NULL){printf("第%d个节点不存在",i);return 0;}else{s = p->next;p->next = s->next;free(s);return 1;}}void main(){LinkList L = Create_LinkList2();print(L);int iPos,iValue;printf("请输入要插入的位置:\n");scanf("%d",&iPos);printf("请输入要插入的值:\n");scanf("%d",&iValue);if(0 == Insert_LinkList(L,iPos,iValue)){return;}print(L);printf("请输入要删除的位置:\n");scanf("%d",&iPos);int a = Del_LinkList(L,iPos);if(0 == a && -1 == a ){return;}print(L);}
单链表小结
1. 通过保存直接后继元素的存储位置来表示数据元素之间的逻辑关系;
2. 插入、删除操作通过修改结点的指针实现;不需要做大量元素的移动。
3. 不能随机存取元素;
0 0
- 每天一个小程序(2)——带头结点的链表的创建以及插入和删除
- 单链表反转问题(带头结点 和 不带头结点的 创建链表过程等)
- C语言实现带头结点的链表的创建、查找、插入、删除
- C语言实现带头结点的链表的创建、查找、插入、删除操作
- 不带头结点的单向链表排序——插入排序(C语言)
- 创建带头结点链表的方法
- 单链表的建立、求长、插入、删除、输出和释放 (带头结点)
- C语言实现单链表(带头结点)的基本操作(创建,头插法,尾插法,删除结点,打印链表)
- C语言实现单链表(带头结点)的基本操作(创建,头插法,尾插法,删除结点,打印链表)
- 每天一个小程序(1)——链表的创建
- 带头双向循环链表的插入和删除
- C语言实现双向非循环链表(带头结点尾结点)的节点插入
- 带头结点单链表的基本操作(创建、测长、打印、插入、删除、取值、合并、排序、逆置)
- 数据结构中 链表的创建,值的插入以及删除(一定注意头结点的作用)
- 带头结点的链表
- 带头结点的链表
- 带头结点的链表
- 双链表的建立、求长、定位、插入、删除、输出和释放(带头结点且成环状)
- 一个循环里fork出的子进程个数
- 关于base64编码的原理及实现--for SMTP
- App圈子聚过来-----致我们一起开发的APP
- 问题二-jsp页面几个常用操作(添加一行、删除、取消修改、保存、修改)-js代码(OK)
- python实现nao机器人手臂动作控制
- 每天一个小程序(2)——带头结点的链表的创建以及插入和删除
- ubuntu server 之U盘安装
- 基于原型的JavaScript面向对象编程
- 笔试题
- POJ 2387 Til the Cows Come Home
- 献给Java初学者
- 在PHP5.3以上版本运行ecshop和ecmall出现的问题及解决方案
- [心情随笔]梦有时比现实充满惊奇
- C语言学习笔记之static和extern(十六)