1.通过指针操作,找出三个整数中的最小值并输出。请填空。
2.下面程序是把从终端读入的一行字符作为字符串放在字符数组中,然后输出。请填空。
3.通过指针操作,将数组中的元素逆序输出。请填空。
4.有n个整数,先将这n个数按输入顺序用单向链表储存起来,然后反转该链表,最后再还原该链表。
#include <stdio.h>
#include <stdlib.h>
typedef struct link
{
int data;
struct link*next;
}LINK;
struct link *input(LINK *head,int n);
void put1(LINK*head);
void put2(LINK*head);
void del(LINK*head);
LINK*daoz(LINK*head);
int main(void)
{
LINK*head=NULL,*r=NULL,*q=NULL;
head=(LINK*)malloc(sizeof(LINK));
head->next=NULL;
int n;
scanf("%d",&n);
head=input(head,n);
put1(head);
r=daoz(head);
put2(r);
q=(LINK*)malloc(sizeof(LINK));
q->next=r;
q=daoz(q);
put2(q);
del(head);
return 0;
}
struct link *input(LINK *head,int n)
{
LINK*pr=head;
for(int i=0;i<n;i++){
LINK*p;
p=(LINK*)malloc(sizeof(LINK));
int num;
scanf("%d",&num);
pr->next=p;
pr=p;
p->data=num;
p->next=NULL;
}
return head;
}
void put1(LINK*head)
{
LINK*p=head->next;
while(p!=NULL){
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void put2(LINK*head)
{
LINK*p=head;
while(p!=NULL){
printf("%d ",p->data);
p=p->next;
}
printf("\n");
}
void del(LINK*head)
{
LINK*p=head,*pr=NULL;
while(p!=NULL){
pr=p;
p=p->next;
free(pr);
}
}
LINK*daoz(LINK*head)
{
LINK*p=NULL,*pr=head->next,*q=NULL;
q=pr->next;
while(1){
pr->next=p;
if(q==NULL){
break;
}
p=pr;
pr=q;
q=q->next;
}
head=pr;
return head;
}
5.有一个含有n个整数的链表,问你这个链表的中间元素是什么?请用链表解决!
#include <stdlib.h>
#include <stdio.h>
typedef struct link
{
int data;
struct link*next;
}LINK;
LINK* input(LINK*head,int n);//创建链表,输入data
void put(LINK*head, int n);//输出中间节点
void del(LINK*head);//删除链表
int main()
{
int num;
scanf("%d",&num);
LINK*head;
head=(LINK*)malloc(sizeof(LINK));
head->next=NULL;
head=input(head,num);
put(head,num);
del(head);
return 0;
}
LINK* input(LINK*head,int n)
{
LINK*p=head;
for(int i=0;i<n;i++)
{
LINK*pr=(LINK*)malloc(sizeof(LINK));
int d;
scanf("%d",&d);
pr->data=d;
pr->next=NULL;
p->next=pr;
p=pr;
}
return head;
}
void put(LINK*head, int n)
{
LINK*p=head;
if(n%2==0)
{
int aver;
aver=n/2;
for(int i=0;i<aver;i++)
{
p=p->next;
}
printf("%d",p->data);
}
else
{
int aver;
aver=(n+1)/2;
for(int i=0;i<aver;i++)
{
p=p->next;
}
printf("%d",p->data);
}
}
void del(LINK*head)
{
LINK*p=head,*q=NULL;
while(p!=NULL)
{
q=p;
p=p->next;
free(q);
}
}