#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#define MAX 1000
/* 编一C程序,它能读入两组整数(每组整数都以-9999为结束标记,个数都不大于1000),
并以从小到大的次序输出既在第一组整数中也在第二组整数中的所有整数(同一个整数不能输出两次)。
(输入时,两个相邻的整数用空格隔开)。*/
/*它能读入一串整数(以-9999为结束标记),再以与输入次序相反的次序输出这串整数(输入、出时,两个相邻的整数用空格隔开)*/
typedef struct Node
{
int d;
struct Node *next;
}NODE,*PNODE;
void printLinkList(PNODE head)
{
PNODE p = head;
while((p=p->next)!=NULL)
{
printf("%d ",p->d);
}
}
//初始化链表 课本上
PNODE initLinklist()
{
PNODE head,tail,p;
int n;
head = (PNODE)malloc(sizeof(NODE));
tail=head;
scanf("%d",&n);
while(n!=-9999)
{
p = (PNODE)malloc(sizeof(NODE));
p->d=n;
tail->next=p;
tail=p;
scanf("%d",&n);
}
tail->next=NULL;
return head;
}
PNODE initLinklist2()
{
PNODE head,h,p;
int d;
head=h=(PNODE)malloc(sizeof(NODE));
scanf("%d",&d);
if(d==-9999)return head;
do
{
p =(PNODE)malloc(sizeof(NODE));
p->d=d;
p->next=NULL;
h->next=p;
h=p;
scanf("%d",&d);
}while(d!=-9999);
return head;
}
//初始化链表,输入 12345 打印54321
PNODE initLinklist3()
{
PNODE head,tail;
int d;
head=(PNODE)malloc(sizeof(NODE));
head->next=NULL;
scanf("%d",&d);
if(d==-9999)return head;
do
{
tail =(PNODE)malloc(sizeof(NODE));
tail->d=d;
if(head->next==NULL)
{
head->next=tail;
tail->next=NULL;
}
else
{
tail->next=head->next;
head->next=tail;
}
scanf("%d",&d);
}while(d!=-9999);
return head;
}
//冒泡排序
PNODE maopaoSort(PNODE head)
{
PNODE p1,p2;
int temp;
p1=head->next;
for(;p1;p1=p1->next)
{
for(p2=p1->next;p2;p2=p2->next)
{
if(p2->d<p1->d)
{
temp=p2->d;
p2->d=p1->d;
p1->d=temp;
}
}
}
return head;
}
void deleteDuplicate(PNODE n){
while(n)
{
n=n->next;
if(n&&n->next&&n->d==n->next->d)
{
n->next=n->next->next;
}
}
}
//前提已经排序
void deleteNoDuplicate(PNODE head)
{
PNODE p;
p=head->next;
while(p)
{
if(p->next&&p->d==p->next->d)
{
p->next=p->next->next;//本应该考虑内存释放
}
p=p->next;
}
}
/*
插入排序
*/
void insertSort1(PNODE head)
{
PNODE h,p1,p2;
if(!head->next||!head->next->next)return;
h=head;
p2=head->next->next;//第二个链表的起始地址
h->next->next=NULL;//第一个节点指向NULL,链表分段
while(p2)
{
p1=p2->next;
h=head;//h归位
while(h->next)
{
if(h->next->d>p2->d)
{
p2->next=h->next;
h->next=p2;
break;
}
else
{
h=h->next;
}
}
if(h->next==NULL)
{
h->next=p2;
p2->next=NULL;
}
p2=p1;//P2归位
}
}
void main()
{
PNODE a;
printf("input a:\n");
a = initLinklist3();
printLinkList(a);
printf("\n");
maopaoSort(a);
printLinkList(a);
//deleteNoDuplicate(a);
//printLinkList(a);
}
分享到:
相关推荐
c语言中链表的学习,总结相当到位,对于初学者有很大的帮助!
C语言链表课件ppt,是你学习链表的好资料。
通讯录管理系统数据结构C语言版链表实现实验报告.doc
C语言链表学习教案.pptx
C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言学习资源C语言...
介绍c语言中链表的使用方法,方便使用学习
C语言项目源码大全的50套源代码资源,这里是其中的c语言实现链表HuffmanTree源码,大家一起学习交流哈!
本程序针对链表进行一系列的操作,包括生成,插入,排序,创建已排链表等。对链表的学习以及后续程序的编写有一定帮助。
链表的c语言实现是学习数据结构的好例子 源代码
用C语言编写的链表中插入节点的程序,供学习参考交流用
C语言双向链表学习文档 深刻的阐述了C语言双向链表的操作!
源码包含单向链表和双向链表,注释比较详细,简单明白,适合新手初学者下载使用,比较基础。觉得有用记得收藏哦!
某培训机构内部学习资源,具有参考价值,利用C语言中宏封装的一套多态链表,用于存储数据
用c语言实现链表排序,利用选择排序的思想,可以供大家学习。
当年新手学习时的资料,一个C语言指针链表例子的源码,希望能帮到你,为初学者带来帮助,后面这些都是废话,50个字补丁!!
该文档综合了所有的链表程序,包括如何创建、删除、增加节点的具体实例,以文档代码的形式呈现了不一样的链表学习方法。
基于C语言的链表以及文件的综合应用,仅对刚入门C语言的伙伴们,如若想要了解C语言中链表和文件操作,可以根据资源文档中的网址进入到博主发布的文章中进行学习。
本文档讲解C语言 动态链表的创建和遍历;适合刚学习的入门读者
适用于初学者学习C语言链表操作的源代码,内含链表的增添,查找,删除等基本操作,并附有详细的代码注释
C语言链表PPT学习教案.pptx