链表结点的插入
2016-05-01 16:33
369 查看
---- 单链表第i个位置插入数据结点的算法思路:
-- 1)声明一结点 p 指向链表头结点,初始化 j 从1开始;
-- 2)当 j<i 时,就遍历链表,让 p 的指针向后移动,不断指向下一结点,j 累加1;
-- 3)若到链表末尾p为空,则说明第 i 个元素不存在;
-- 4)否则查找成功,在系统中生成一个空结点s;
-- 5)将数据元素e赋值给s->data;
-- 6)单链表的插入标准语句 s->next=p->next; p->next=s;
-- 7)返回成功。
输入输出显示:
-- 1)声明一结点 p 指向链表头结点,初始化 j 从1开始;
-- 2)当 j<i 时,就遍历链表,让 p 的指针向后移动,不断指向下一结点,j 累加1;
-- 3)若到链表末尾p为空,则说明第 i 个元素不存在;
-- 4)否则查找成功,在系统中生成一个空结点s;
-- 5)将数据元素e赋值给s->data;
-- 6)单链表的插入标准语句 s->next=p->next; p->next=s;
-- 7)返回成功。
#include <iostream> using namespace std; #define OK 1 #define ERROR 0 #define TRUE 1 #define FALSE 0 typedef int Status; typedef int Elemtype; typedef struct node { Elemtype data; struct node *next; } Node,*LinkList; //typedef struct node *LinkList; //typedef Node *LinkList; //L:指向头指针的指针(无头结点) Status ListInsert(LinkList *L,int i,Elemtype e) { int j = 1; LinkList p,s; p = *L; while(p&&j<i) { p = p->next; j++; } if(!p||j>i) { return ERROR; } s = (LinkList)malloc(sizeof(Node));//生成新结点 s->data = e; s->next = p->next;p->next=s; return OK; }2、已知学生链表结点是按学号(number)按从小到大的顺序排列,插入新的结点到链表使其仍然有序。
#include <iostream> using namespace std; #define New(p) { p=(STU*)malloc(sizeof(STU));\ printf("please input number and name:\n");\ scanf("%d %s",&p->num,&p->name);\ p->next=NULL;} typedef struct Student { int num;//学号 char name[20];//姓名 struct Student *next; }STU; //链表结点的创建 STU * Create() { /*p1指向新建结点,p2指向前一结点,head指向头结点*/ STU *p1,*p2 = NULL,*head = NULL; New(p1); while(p1->num!=0) //学号不为0则添加到链表 { if(head == NULL) { head = p1; } else { p2->next = p1; } p2 = p1; New(p1); } //free(p1); return head; } //链表结点的插入 STU * Insert(STU *head,STU *pnew) { STU *p1 = head,*p2; if(head == NULL) { head = pnew;//无元素,插入在链表头 } else { while(pnew->num > p1->num&&p1->next!=NULL) { p2 = p1; p1 = p1->next; } if(pnew->num <= p1->num) { if(head == p1) //插入的元素值最小,插入链表头 { pnew->next = p1; head = pnew; } else //插入链表中间 { p2->next = pnew; pnew->next = p1; } } else //插入链表结尾 { p1->next = pnew; pnew->next = NULL; } } return head; } //链表的输出 void Print(STU *p) { printf("学生的信息如下:\n"); while(p!=NULL) { printf("%d %s\n",p->num,p->name); p = p->next; } } int main() { STU *head = NULL,*pnew; head = Create(); printf("Inser a new element:\n"); New(pnew); Insert(head,pnew); Print(head); system("pause"); return 0; }
输入输出显示:
相关文章推荐
- LightOJ 1341
- Chaikin细分曲线
- 用C语言写的注释转换
- 重载内核全程分析笔记
- 第二章 关系模型介绍
- 新手在windows7下安装ubuntu15.10
- 全国SHP地图数据赠送
- 移动开发入门指南
- 希尔排序(Shell)
- ZOJ - 3880 Demacia of the Ancients (水)
- Eclipse中 package 中创建新package 会分离的问题
- POJ 3352 Road Construction 边双联通分量
- Android 透明状态栏实现方案
- Struts2在开发中的一些异常总结(持续更新)
- latex 小结
- 内核中的内存申请:kmalloc、vmalloc、kzalloc、get_free_pages 之间的区别
- iOS - 距离传感器
- 【软件工程】 文档 - 银行业务管理 - 结构化设计
- zzu 10467: 控制食欲 --01背包
- Linux信号