链表的顺序插入 先分析有几种类型再编写 思路要清晰
2013-08-17 21:08
246 查看
//P339链表的实现
#include "MyList.h"
struct node* Insert(struct node* head,int x)//head中的数据都排好序 小到大 x按顺序插入
{
struct node * q=head,*pre;
struct node * newnode=(struct node*) malloc(sizeof(struct node));
newnode->data = x;
if(head==NULL)
{
head = newnode;
head->next=NULL;
return head;
}
while(q!=NULL)
{
if(q->data>=x) break;
pre = q;
q=q->next;
}
if(q==head)//头结点插入
{
head = newnode;
newnode->next=q->next;
}
else //非头节点
{
pre->next=newnode;
newnode->next = q;
}
return head;
}
int main()
{
struct node * head = NULL;
int x;
while (scanf("%d",&x)==1)
{
head=Insert(head,x);
printf("列表成员如下:\n");
Print(head);
}
DelMemory(head);
return 0;
}
#include "MyList.h"
struct node* Insert(struct node* head,int x)//head中的数据都排好序 小到大 x按顺序插入
{
struct node * q=head,*pre;
struct node * newnode=(struct node*) malloc(sizeof(struct node));
newnode->data = x;
if(head==NULL)
{
head = newnode;
head->next=NULL;
return head;
}
while(q!=NULL)
{
if(q->data>=x) break;
pre = q;
q=q->next;
}
if(q==head)//头结点插入
{
head = newnode;
newnode->next=q->next;
}
else //非头节点
{
pre->next=newnode;
newnode->next = q;
}
return head;
}
int main()
{
struct node * head = NULL;
int x;
while (scanf("%d",&x)==1)
{
head=Insert(head,x);
printf("列表成员如下:\n");
Print(head);
}
DelMemory(head);
return 0;
}
相关文章推荐
- 算法导论第三版第十章 单链表实现栈和队列(思路简单清晰)
- 数据结构-线性表(顺序表与链表的基本知识 以及ArrayList 源码分析)
- 双向链表插入结点分析和总结
- 关于动态存储分配函数的调用,在已经过排序的数组中查找及删除内容的操作,余数的分析,删除字符数组中的空格,对链表的逆置,在源字符串中查找子字符串的个数,函数指针以及函数的调用,循环赋值带来的问题以及插入
- 1、通过程序设计几何图形(Shape)、矩形(Rectangle)、圆形(Circle)、正方形(Square)几种类型,能够利用接口和多态性计算几何图形的面积和周长并显示。 2、按以下要求编写程序
- 【常用算法思路分析系列】链表相关高频题集
- 单链表中一个插入操作的分析
- (一)顺序表和单链表的初始化、插入、删除等操作
- 算法导论第三版第十章 单链表实现栈和队列(思路简单清晰)
- 链表的顺序结构及其插入、删除的问题
- 编写一个程序实现顺序栈的各种基本运算(假设顺序表的元数基本类型为Char)
- 单链表中一个插入操作的分析
- [数据结构]顺序单链表插入
- 算法导论第三版第十章 单链表实现栈和队列(思路简单清晰)
- 在一个递增有序链表中插入新结点并保持链表递增顺序不变
- 几种内存溢出的类型及解决思路
- 求两个链表的第一个公共结点各种情况及三种思路分析
- 单链表中一个插入操作的分析
- 顺序表,链表,静态链表的建立以及插入和删除操作
- C#保留2位小数几种场景总结 游标遍历所有数据库循环执行修改数据库的sql命令 原生js轮盘抽奖实例分析(幸运大转盘抽奖) javascript中的typeof和类型判断