-
C第十一天
今天总共讲了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);
}