电商专业学习嵌入式软件开发第三十七天

2017-03-08  本文已影响0人  雨打梨花闭门寒

今天总共讲了5题,4题排序,讲完排序之后发现还有时间,就给我们讲了双向链表,仍然是拿昨天的那个题目给我们,结果再一次的没有做出来,虽然答案只是在昨天的基础上稍作修改。老师也发现我们现在缺少的是将思维转化为代码的能力,虽然能看懂,但是自己写不出来,在这方面需要多多练习。

//冒泡排序
#include<stdio.h>
void swap(int a[],int n)
{
    int i,j;
    for(j = 1;j <= n-1;j++) //此处默认数组下标从a[1]开始
    {
        for(i = 1;i <= n-j;i++)
        {
            if(a[i] > a[i+1])
            {
                a[0] = a[i];    //a[0]相当于交换函数int temp;
                a[i] = a[i+1];
                a[i+1] = a[0];
            }   
        }
    }
}
int main()
{
    int a[30],i;
    for(i = 1;i <= 10;i++)
    scanf("%d",&a[i]);
    swap(a,10);
    for(i = 1;i <= 10;i++)
    printf("%d ",a[i]);
    printf("\n");
}
//选择排序
#include <stdio.h>
void Sort(int a[],int n)
{
    int i,j,k;
    for(i=1;i<=n-1;i++)
    {
        //确定位置的值
        k=i;
        for(j=i+1;j<=n;j++)
        {
            if(a[k]>a[j])
            {
                k=j;
            }
        }
        if(k!=i)
        {
            a[0]=a[i];
            a[i]=a[k];
            a[k]=a[0];
        }
    }
}
void main()
{
    int a[30],i;
    for(i=1;i<=10;i++)
        scanf("%d",&a[i]);
    Sort(a,10);
    for(i=1;i<=10;i++)
        printf("%d ",a[i]);
    printf("\n");
}
//快速排序
#include <stdio.h>
int Find(int a[],int low,int high)
{
    a[0]=a[low];
    while(low<high)
    {
        while(low < high && a[0] < a[high])
            high--;
        if(low<high)
        {
            a[low]=a[high];
            low++;
        }
        while(low < high && a[0] > a[low])
            low++;
        if(low<high)
        {
            a[high]=a[low];
            high--;
        }
    }
    a[low]=a[0];
    return low;
}
void Swap(int a[],int m,int n)
{
    int i;
    if(m<n)
    {
        i=Find(a,m,n);
        Swap(a,m,i-1);
        Swap(a,i+1,n);
    }
}
void main()
{
    int a[30],i;
    for(i = 1;i <= 10;i++)
      scanf("%d",&a[i]);
    swap(a,1,10);
    for(i = 1;i <= 10;i++)
    printf("%d ",a[i]);
    printf("\n");
}
//直接插入排序
#include <stdio.h>
void Sort(int a[],int n)
{
    int i,j;
    for(i=2;i<=n;i++)
    {
        if(a[i]<a[i-1])
        {
            a[0]=a[i];
            j=i-1;
            do
            {
                a[j+1]=a[j];
                j--;
            }while(a[0]<a[j]);
            a[j+1]=a[0];
        }
    }
}
void main()
{
    int a[30],i;
    for(i = 1;i <= 10;i++)
        scanf("%d",&a[i]);
    sort(a,10);
    for(i = 1;i <= 10;i++)
        printf("%d ",a[i]);
    printf("\n");
}

双向链表

//练习:从键盘输入一串字符,以此建立一条双向链表,并输出。
#include <stdio.h>
#include <stdlib.h>
struct node 
{
    char data;
    struct node *prior;
    struct node *next;
};
struct node *Create()
{
    char c;
    struct node *head=(struct node *)malloc(sizeof(struct node));
    head->next=NULL;
    head->prior=NULL;
    struct node *last=head;
    while((c=getchar())!='\n')
    {
        struct node *q=(struct node *)malloc(sizeof(struct node));
        q->data=c;
        last->next=q;
        q->prior=last;
        last=q;
    }
    last->next=NULL;
    return head;
}
void Print(struct node *head)
{
    struct node *p=head->next;
    while(p)
    {
        putchar(p->data);
        p=p->next;
    }
    putchar('\n');
}
void main()
{
    struct node *head=Create();
    Print(head);
}    
上一篇 下一篇

猜你喜欢

热点阅读