一个线性表中的元素为整数,设计一个算法,将正整数和负整数分开,使线性表的前一半为负整数,后一半为正整数。(C语言)
以下为完整可运行示例代码:
#include <stdio.h>
#include <stdlib.h>
typedef struct LNode{
int data;
struct LNode *next;
}LNode;
LNode* creat(int n){
LNode *Link;
LNode *p1,*p2;
int data;
Link=(LNode*)malloc(sizeof(LNode));
p2=Link;
for(int i=;i<n;++i){ //一共n个数
scanf("%d",&data);
p1=(LNode*)malloc(sizeof(LNode));
p1->data=data;
p2->next=p1;
p2=p1;
}
p2->next=NULL;
return Link;
} LNode* separate(LNode *&A){
LNode *p1,*p2; //指针p2是原始混合数链表的哨兵指针,把p2扫描到的负整数存到p1结点
LNode *p; //p后连接p1结点
LNode *q1,*q2; //把p2扫描到的正整数存到q1结点,已经存完负整数的p后再连接一个个q1结点
p=(LNode*)malloc(sizeof(LNode));
p2=A->next;
q2=A->next;//q2再重新扫描原始链表
while(p2!=NULL){
if(p2->data<){
p1=(LNode*)malloc(sizeof(LNode));
p1->data=p2->data;
p->next=p1;
p=p1;
p2=p2->next; //p2继续向后扫描
printf("%d",p->data);
printf(" ");
}
else
p2=p2->next;
}
while(q2!=NULL){
if(q2->data>){
q1=(LNode*)malloc(sizeof(LNode));
q1->data=q2->data;
p->next=q1;
p=q1;
q2=q2->next;
printf("%d",p->data);
printf(" ");
}
else
q2=q2->next;
}
printf("\n");
return A;
}
void print(LNode *Link){
LNode *p;
p=Link->next;
while(p!=NULL){
printf("%d",p->data);
printf(" ");
p=p->next;
}
printf("\n");
} int main(){
LNode *Link=NULL;
int num;
printf("共创建几个链表结点:");
scanf("%d",&num);
printf("请输入链表结点:\n");
Link=creat(num);
printf("已创建好的链表结点:");
print(Link);
separate(Link);
return ;
}
运行结果如下:

一个线性表中的元素为整数,设计一个算法,将正整数和负整数分开,使线性表的前一半为负整数,后一半为正整数。(C语言)的更多相关文章
- Class 找出一个整形数组中的元素的最大值
目的:找出一个整形数组中的元素的最大值 以下,我们用类和对象的方法来做. #include<iostream> using namespace std; class Array_m ...
- SQL把表中的数据复制到另一个数据库中
1 删除整张表的数据,并还原自增长值TRUNCATE TABLE TbWeixinActivity 2 3张表左连接select a.ID,c.Name,b.nickname,a.CreateDate ...
- SQL数据库中把一个表中的数据复制到另一个表中
1.如果是整个表复制表达如下: insert into table1 select * from table2 2.如果是有选择性的复制数据表达如下: insert into table1(colu ...
- list,set等集合遍历时,不能remove集合中的元素。需要new一个Object或者list,set,里面add需要删除的元素,等集合遍历完了进行remove(Object)或者removeAll(list/set)操作
list,set等集合遍历时,不能remove集合中的元素.需要new一个Object或者list,set,里面add需要删除的元素,等集合遍历完了进行remove(Object)或者removeAl ...
- sql将一个表中的数据插入到另一个表中
sql将一个表中的数据插入到另一个表中 列名不一定要相同,只要你在HH中列出要插入列的列表跟select from mm表中的选择的列的列表一一对应就可以了,当然两边的数据类型应该是兼容的. ...
- hivesql-一个表中的数据不在另一个表中
如何最有效的判断 一个表中的数据不在另一个表中 两个方法一个是join 另一个是 exist 方法
- Path,Files巩固,题目:从键盘接收两个文件夹路径,把其中一个文件夹中(包含内容)拷贝到另一个文件夹中
这个题目用传统的File,InputStream可以做,但是如果用Files,Path类做,虽然思路上会困难一些,但是代码简洁了很多,以下是代码: import java.io.IOException ...
- 下拉框——把一个select框中选中内容移到另一个select框中遇到的问题
在使用jQuery实现把一个select框中选中内容移到另一个select框中功能时遇到了一个问题,就是点击按钮时内容可以到另一个select框中,但是到了另一个select框中的内容却很快闪退回原来 ...
- Excel-判断一个文本字符串中是否包含数字! 判断一个文本字符串是否是纯汉字!
0.判断一个文本字符串中是否包含数字!/判断一个文本字符串是否是纯汉字! 公式=IF(LENB(A1)=2*LEN(A1),"都是汉字","含有非汉字字符") ...
随机推荐
- c# wpf ComboBox 动态下拉框 及 动态默认值设定
1.下拉框声明 <ComboBox x:Name="DirComboBox" Width="150" Height="18" Marg ...
- matlab之sortrows()函数
sortrows()函数的格式: sortrows(A,column) A是一个矩阵,如果没有第二个参数column,则默认按照第一列升序排列,如果遇到重复数字,则按照第二列升序排列,依次类推... ...
- Java企业微信开发_12_异常:java.lang.OutOfMemoryError: Java heap space
一.异常现象 今天客户迁到正式环境,在做企业微信 接收消息服务器配置 时,出现如下异常: java.lang.OutOfMemoryError: Java heap space 二.异常原因 JAV ...
- Java如何创建内部类对象
public static void main(String[] args) { Person p = new Test().new Person(); } class Person { String ...
- k8s-集群状态及部署一个实例
[root@k8s-master ~]# kubectl get csNAME STATUS MESSAGE ERRORcontroller-manager Healthy ok scheduler ...
- 【Lintcode】105.Copy List with Random Pointer
题目: A linked list is given such that each node contains an additional random pointer which could poi ...
- 系列文章-- SSIS学习
SSIS是SQL Server Integraion Services的简称.是生成高性能数据集成解决方案(包括数据仓库的提取.转换和加载 (ETL) 包)的平台. SSIS组件转换_模糊查找转换 ...
- 高性能的序列化与反序列化:kryo的简单使用
前言:kryo是个高效的java序列化/反序列化库,目前Twitter.yahoo.Apache.strom等等在使用该技术,比如Apache的spark.hive等大数据领域用的较多. 为什么使用k ...
- 理解I/O Completion Port(完成端口)
欢迎阅读此篇IOCP教程.我将先给出IOCP的定义然后给出它的实现方法,最后剖析一个Echo程序来为您拨开IOCP的谜云,除去你心中对IOCP的烦恼.OK,但我不能保证你明白IOCP的一切,但我会尽我 ...
- [转]从onload和DOMContentLoaded谈起
这篇文章是对这一两年内几篇dom ready文章的汇总(文章的最后会标注参考文章),因为浏览器进化的关系,可能他们现在的行为与本文所谈到的一些行为不相符.我也并没有一一去验证,所以本文仅供参考,在具体 ...