输入n及n个整数构建成一个c 单链表表,输出原始链表。输入待查值x,查询该链表中是否存在x

数据结构上机测试2-1:单链表操作A_ASP.NET技巧_动态网站制作指南
数据结构上机测试2-1:单链表操作A
来源:人气:49
原blog被 误删TAT
大写的尴尬!!!!
数据结构上机测试2-1:单链表操作A
oblem Descrtion
输入n个整数,先按照数据输入的顺序建立一个带头结点的单链表,再输入一个数据m,将单链表中的值为m的结点全部删除。分别输出建立的初始单链表和完成删除后的单链表。
第一行输入数据个数n;
第二行依次输入n个整数;
第三行输入欲删除数据m。
第一行输出原始单链表的长度;
第二行依次输出原始单链表的数据;
第三行输出完成删除后的单链表长度;
第四行依次输出完成删除后的单链表数据。
Example Input
56 25 12 33 66 54 7 12 33 12
Example Output
56 25 12 33 66 54 7 12 33 12
56 25 33 66 54 7 33
#include&stdio.h&
#include&string.h&
#include&stdlib.h&
struct node
struct node *
int main()
int n, count,
struct node *head, *p, *q, *t;
head = (struct node *)malloc(sizeof(struct node));
head -& next = NULL;
scanf("%d",&n);
while(n -- )
//建立顺序链表
p = (struct node*)malloc(sizeof(struct node));
scanf("%d",&p -& data);
p -& next = NULL;
q -& next =
p = head -&
scanf("%d",&key);
printf("%d\n",count);
p = head -&
printf("%d",p -& data);
if (p -&next !=NULL)
printf(" ");
printf("\n");
// 删除重复元素
while(q-&next)
if(q-&next-&data == key)
q-&next = t-&
printf("%d\n",count);
p = head -&
printf("%d",p -& data);
if (p -&next !=NULL)
printf(" ");
printf("\n");
优质网站模板在单链表中存放n个字符设计一个算法使用栈判断该字符串是否中心对称
在单链表中存放n个字符设计一个算法使用栈判断该字符串是否中心对称
09-05-20 &匿名提问
给你找个网址~!你可以好好研究http:// hi. baidu. com / sumewanttobecomeagrandmaster/blog/item/def1f1f0a99d67aba50f52e1. html有空格的地方你删掉就可以了
请登录后再发表评论!
排序是计算机内经常进行的一种操作,其目的是将一组“无序”的记录序列调整为“有序”的记录序列。  内部排序和外部排序:  若整个排序过程不需要访问外存便能完成,则称此类排序问题为内部排序;  反之,若参加排序的记录数量很大,整个序列的排序过程不可能在内存中完成,则称此类排序问题为外部排序。  内部排序的过程是一个逐步扩大记录的有序序列长度的过程。  内排序的方法有许多种,按所用策略不同,可归纳为五类:插入排序、选择排序、交换排序、归并排序和分配排序。  其中,插入排序主要包括直接插入排序和希尔排序两种;选择排序主要包括直接选择排序和堆排序;交换排序主要包括气(冒)泡排序和快速排序。  一、冒泡排序/选择排序  已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先比较a[1]与 a[2]的值,若a[1]大于a[2]则交换两者的值,否则不变。再比较a[2]与a[3]的值,若a[2]大于a[3]则交换两者的值,否则不变。再比较a[3]与a[4],以此类推,最后比较a[n-1]与a[n]的值。这样处理一轮后,a[n]的值一定是这组数据中最大的。再对a[1]~a[n- 1]以相同方法处理一轮,则a[n-1]的值一定是a[1]~a[n-1]中最大的。再对a[1]~a[n-2]以相同方法处理一轮,以此类推。共处理 n-1轮后a[1]、a[2]、……a[n]就以升序排列了。  优点:稳定,比较次数已知;  缺点:慢,每次只能移动相邻两个数据,移动数据的次数多。  二、插入排序  已知一组升序排列数据a[1]、a[2]、……a[n],一组无序数据b[1]、 b[2]、……b[m],需将二者合并成一个升序数列。首先比较b[1]与a[1]的值,若b[1]大于a[1],则跳过,比较b[1]与a[2]的值,若b[1]仍然大于a[2],则继续跳过,直到b[1]小于a数组中某一数据a[x],则将a[x]~a[n]分别向后移动一位,将b[1]插入到原来 a[x]的位置这就完成了b[1]的插入。b[2]~b[m]用相同方法插入。(若无数组a,可将b[1]当作n=1的数组a)  优点:稳定,快;  缺点:比较次数不一定,比较次数越少,插入点后的数据移动越多,特别是当数据总量庞大的时候,但用链表可以解决这个问题。  三、缩小增量排序  由希尔在1959年提出,又称希尔排序(shell排序)。  已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。发现当n不大时,插入排序的效果很好。首先取一增量d(d&n),将a[1]、a[1+d]、a[1+2d]……列为第一组,a[2]、a[2+d]、 a[2+2d]……列为第二组……,a[d]、a[2d]、a[3d]……列为最后一组以次类推,在各组内用插入排序,然后取d'&d,重复上述操作,直到d=1。  优点:快,数据移动少;  缺点:不稳定,d的取值是多少,应取多少个不同的值,都无法确切知道,只能凭经验来取。  四、快速排序  快速排序是冒泡排序的改进版,是目前已知的最快的排序方法。  已知一组无序数据a[1]、a[2]、……a[n],需将其按升序排列。首先任取数据a[x] 作为基准。比较a[x]与其它数据并排序,使a[x]排在数据的第k位,并且使a[1]~a[k-1]中的每一个数据&a[x],a[k+1]~a[n]中的每一个数据&a[x],然后采用分治的策略分别对a[1]~a[k-1]和a[k+1]~a[n] 两组数据进行快速排序。  优点:极快,数据移动少;  缺点:不稳定。  五、箱排序  已知一组无序正整数数据a[1]、a[2]、……a[n],需将其按升序排列。首先定义一个数组x[m],且m&=a[1]、a[2]、……a[n],接着循环n次,每次x[a]++.  优点:快,效率达到O(1)  缺点:数据范围必须为正整数并且比较小
请登录后再发表评论!2122&&&&数据结构实验之链表七:单链表中重复元素的删除
数据结构实验之链表七:单链表中重复元素的删除
Time Limit: 1000MS Memory limit:
按照数据输入的相反顺序(逆位序)建立一个单链表,并将单链表中重复的元素删除(值相同的元素只保留最后输入的一个)。
第一行输入元素个数n;
第二行输入n个整数。
第一行输出初始链表元素个数;
第二行输出按照逆位序所建立的初始链表;
第三行输出删除重复元素后的单链表元素个数;
第四行输出删除重复元素后的单链表。
21 30 14 55 32 63 11 30 55 30
30 55 30 11 63 32 55 14 30 21
30 55 11 63 32 14 21
#include&stdio.h&
#include&malloc.h&
struct LinkList{
&&& struct LinkList *
LinkList * CreateList(LinkList *head,int n){
&&& LinkList *r;
&&& head-&next=NULL;
&&& for(int i=0;i&n;i++){
&&&&&&& r=(LinkList *)malloc(sizeof(LinkList));
&&&&&&& scanf("%d",&r-&data);
&&&&&&& r-&next=head-&
&&&&&&& head-&next=r;
LinkList *DeleList(LinkList *&head,int &n){
&&& LinkList *p,*q,*temp1,*temp2;
&&& p=head-&
&&& while(p-&next!=NULL){
&&&&&&& temp1=p;
&&&&&&& while(q!=NULL){
&&&&&&&&&&& if(p-&data==q-&data){
&&&&&&&&&&&&&&& temp2=q;
&&&&&&&&&&&&&&& q=q-&
&&&&&&&&&&&&&&& temp1-&next=q;
&&&&&&&&&&&&&&& free(temp2);
&&&&&&&&&&&&&&& n--;
&&&&&&&&&&& }else{
&&&&&&&&&&&&&&& q=q-&
&&&&&&&&&&&&&&& temp1=temp1-&
&&&&&&&&&&& }
&&&&&&& p=p-&
&&&&&&& q=p-&
&&& printf("%d\n",n);
void DispList(LinkList *head){
&&& LinkList *p=head-&
&&& while(p-&next!=NULL){
&&&&&&& printf("%d ",p-&data);
&&&&&&& p=p-&
&&& printf("%d\n",p-&data);
int main(){
&&& scanf("%d",&n);
&&& LinkList *
&&& head=(LinkList *)malloc(sizeof(LinkList));
&&& CreateList(head,n);
&&& printf("%d\n",n);
&&& DispList(head);
&&& DeleList(head,n);
&&& DispList(head);
&&& return 0;
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 单链表 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信