用指针实现链表--插入排序
2014-03-24 12:06
148 查看
★实验任务
有n(1<=n<=1000)个整数,a1,a2,…an已经按照从小到大顺序排列好,现在另外给
m(1<=m<=1000)个整数x1,x2,….xm,请将这些数插入到序列中,并使新的序列仍然是从
小到大顺序。
★数据输入
输入第一行是n和m,第二行是已经有序的n个数的数列。第三行是待m个待插入的整
数数。
★数据输出
输出插入新的元素后的数列,数据间以空格隔开。
输入示例
3 1
1 2 3
4
输出示例
1 2 3 4
第一次使用链表,发现自己还有很多不懂,Go Go 加油!
#include<stdio.h>
#include<malloc.h>
#define ListItemint
typedef struct node *link;
typedef struct node{
ListItemelement;
linknext;
}Node;
typedef struct llist *List;
typedef struct llist{
linkfirst;
}Llist;
List ListInit()
{
ListL=(List)malloc(sizeof(*L));
L->first=0;
returnL;
}
link NewNode()//新节点
{
linkp;
p=(link)malloc(sizeof(Node));
returnp;
}
void ListInsert(int l,List L)//插入排序
{
linkp,y;
ListItemx,t;
for(inti=0;i<l;i++)
{
scanf("%d",&x);
t=0;
p=L->first;
for(;p&&x>p->element;p=p->next)
{
t++;
if(p->next&&x<=p->next->element)
break;
if(!p->next) break;
}
y=NewNode();
y->element=x;
if( t )
{
y->next=p->next;
p->next=y;
}
else
{
y->next=L->first;
L->first=y;
}
}
}
int main()
{
intn,m;
ListItemx;
ListL;
linkp;
while(scanf("%d%d",&n,&m)!=EOF)
{
L=ListInit();
ListInsert(n+m,L);
for(p=L->first;p;p=p->next)
{
if(p==L->first)printf("%d",p->element);
else
printf("%d",p->element );
}
printf("\n");
}
return0;
}
有n(1<=n<=1000)个整数,a1,a2,…an已经按照从小到大顺序排列好,现在另外给
m(1<=m<=1000)个整数x1,x2,….xm,请将这些数插入到序列中,并使新的序列仍然是从
小到大顺序。
★数据输入
输入第一行是n和m,第二行是已经有序的n个数的数列。第三行是待m个待插入的整
数数。
★数据输出
输出插入新的元素后的数列,数据间以空格隔开。
输入示例
3 1
1 2 3
4
输出示例
1 2 3 4
第一次使用链表,发现自己还有很多不懂,Go Go 加油!
#include<stdio.h>
#include<malloc.h>
#define ListItemint
typedef struct node *link;
typedef struct node{
ListItemelement;
linknext;
}Node;
typedef struct llist *List;
typedef struct llist{
linkfirst;
}Llist;
List ListInit()
{
ListL=(List)malloc(sizeof(*L));
L->first=0;
returnL;
}
link NewNode()//新节点
{
linkp;
p=(link)malloc(sizeof(Node));
returnp;
}
void ListInsert(int l,List L)//插入排序
{
linkp,y;
ListItemx,t;
for(inti=0;i<l;i++)
{
scanf("%d",&x);
t=0;
p=L->first;
for(;p&&x>p->element;p=p->next)
{
t++;
if(p->next&&x<=p->next->element)
break;
if(!p->next) break;
}
y=NewNode();
y->element=x;
if( t )
{
y->next=p->next;
p->next=y;
}
else
{
y->next=L->first;
L->first=y;
}
}
}
int main()
{
intn,m;
ListItemx;
ListL;
linkp;
while(scanf("%d%d",&n,&m)!=EOF)
{
L=ListInit();
ListInsert(n+m,L);
for(p=L->first;p;p=p->next)
{
if(p==L->first)printf("%d",p->element);
else
printf("%d",p->element );
}
printf("\n");
}
return0;
}
相关文章推荐
- 【旧代码】fortran中的指针实现链表的代码
- C和指针之高级指针话题通过函数指针实现在链表中找到特定的值
- c语言实现单链表&二级指针在单链表的应用
- Java没有指针怎么实现链表?
- 算法导论10.2-8-用一个整数地址替代前后指针实现双向链表
- C语言通用数据类型链表的实现,(数据域为指针,可指向任意类型数据)
- C实现 LeetCode->Reverse Nodes in k-Group (双指针大法)(单链表反转)
- 结构体指针实现插入排序和解决约瑟夫环问题
- 使用单指针实现双链表(C++语言)
- 【旧代码】fortran中的指针实现链表的代码
- Python 实现通过指针实现链表翻转,链表奇偶下标交换,链表的冒泡排序
- 使用一个指针实现双向链表
- C语言用链表实现插入排序
- C实现 LeetCode->Linked List Cycle 双指针大法)(单链表是否有环 并计算环长度)
- 结构体内可以包含自身的指针(链表实现方法)或 引用 但不可以包含自身变量即递归 (因为这样一来结构体大小就无法确定了)
- 带有头指针的链表的 创建 输出 查找 删除 释放 排序(冒泡排序)功能实现(尾插法(自动记录最后一个节点))
- 编码实现环状单向链表(尾指针直接指向头指针,中间没有空节点),去除连续的重复元素的操作
- C实现 LeetCode->Rotate List(双指针大法)(单链表 部分旋转)
- C实现 LeetCode->Reverse Linked List II (双指针大法)(单链表反转)
- 二级指针实现单链表的插入、删除及 linux内核源码双向链表之奇技