一个线性表中的元素为整数,设计一个算法,将正整数和负整数分开,使线性表的前一半为负整数,后一半为正整数。(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),"都是汉字","含有非汉字字符") ...
随机推荐
- "flash download failed - Target dll has been cancelled"错误解决办法
在用mdk通过stlink烧写官方例程到stm32f429I discovery时,烧写了十来个程序都没问题,突然在烧写一个程序时, 弹出了“flash download failed - Targe ...
- poj 3041 Asteroids(二分图 *【矩阵实现】【最小点覆盖==最大匹配数】)
Asteroids Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16379 Accepted: 8930 Descri ...
- c 获取 域名ip
#include <stdio.h> #include <netdb.h> int main(int argc, char *argv[]) { ) { printf(]); ...
- python之menu
只有主菜单没有二级菜单的例子: from tkinter import * root=Tk() root.wm_title('同济大学财务管理系统') menubar=Menu(root)#指定菜单实 ...
- Android Studio 代码混淆(你真的会混淆吗)
一.前言 今天要打包新产品,突然忘了混淆的参数是怎么写的了,虽然之前也混淆过,可是具体配置的参数代码有些记不起来了,因此决定花点时间写篇博客记录一下,方便以后查找和自己的记忆. 二.Android S ...
- 【转】PHP生成器 (generator)和协程的实现
原文地址:https://phphub.org/topics/1430 1.一切从 Iterator 和 Generator 开始 为便于新入门开发者理解,本文一半篇幅是讲述迭代器接口(Iterato ...
- 一些flag
连续两道组合计数题 WA 在杨辉三角上,TM 我要是联赛杨辉三角萎了就剁*. 又连续两道题萎在数组越界上,TM 我要是联赛数组越界就吃*.
- Unix环境编程之文件IO
1.文件IO 2.文件与目录 3.进程 4.多线程编程 5.信号 6.进程间通信 学习linux编程,首先要学会使用shell,这里一些基础命令就不介绍了.这里唯一要提的一个shell命令就是man. ...
- NO0:重新拾起C语言
因工作所需,重新捡起C语言,之前在学校里有接触过,但现在已经忘的一干二净了,现决定重新开始学习,为工作,为生活. 以<标准 C程序设计 第5版>的课程进行基础学习,同时以另外两本书为辅助, ...
- ZOJ1905Power Strings (KMP||后缀数组+RMQ求循环节)
Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc&quo ...