P318_1112 将链表逆序排列,即将链头当链尾,链尾当链头
2014-08-29 22:26
369 查看
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#define LEN sizeof(STUDENT)
typedef struct
{
long snum;
char sname[10];
char ssex;
int sage;
struct STUDENT*next;
}STUDENT;
void print(STUDENT *head)
{
STUDENT *p1;
p1 = head;
while(p1!=NULL)
{
printf("snum:%ld",p1->snum);
printf("\nsname:");
puts(p1->sname);
printf("ssex:%c",p1->ssex);
printf("\nsage:%d\n",p1->sage);
p1 = p1->next;
}
}
STUDENT * input_student(int n)
{
STUDENT*p1,*p2,*head;
int i = 0;
for(i = 0;i< n;i++)
{
p1 = (STUDENT *)malloc(LEN);
printf("snum:");
scanf("%ld",&p1->snum);
printf("sname:");
getchar();
gets(p1->sname);
printf("ssex:");
scanf("%c",&p1->ssex);
printf("sage:");
scanf("%d",&p1->sage);
if(i==0) {p2 = head = p1;}
else
{
p2->next = p1;
p2 =p2->next;
}
p1 = (STUDENT *)malloc(LEN);
}//for
p2->next= NULL;
free(p1);
return head;
}
STUDENT *converse(STUDENT *head)
{
if((head==NULL) ||(head->next == NULL)) return head;
STUDENT *p1,*p2;
p1 = NULL;
while(head!=NULL)
{
p2 = head->next;
head->next = p1;
p1 = head;
head = p2;
}
head = p1;
return head;
}
int main()
{
int n;
printf("how manystudents' information you want to input:");//11题
scanf("%d",&n);
STUDENT *ahead =input_student(n);
printf("These arestudents'informations:\n");
print(ahead);
ahead =converse(ahead);
printf("These arestudents'informations concersed:\n");
print(ahead);
return 0;
}
#include <stdlib.h>
#include <malloc.h>
#include <string.h>
#define LEN sizeof(STUDENT)
typedef struct
{
long snum;
char sname[10];
char ssex;
int sage;
struct STUDENT*next;
}STUDENT;
void print(STUDENT *head)
{
STUDENT *p1;
p1 = head;
while(p1!=NULL)
{
printf("snum:%ld",p1->snum);
printf("\nsname:");
puts(p1->sname);
printf("ssex:%c",p1->ssex);
printf("\nsage:%d\n",p1->sage);
p1 = p1->next;
}
}
STUDENT * input_student(int n)
{
STUDENT*p1,*p2,*head;
int i = 0;
for(i = 0;i< n;i++)
{
p1 = (STUDENT *)malloc(LEN);
printf("snum:");
scanf("%ld",&p1->snum);
printf("sname:");
getchar();
gets(p1->sname);
printf("ssex:");
scanf("%c",&p1->ssex);
printf("sage:");
scanf("%d",&p1->sage);
if(i==0) {p2 = head = p1;}
else
{
p2->next = p1;
p2 =p2->next;
}
p1 = (STUDENT *)malloc(LEN);
}//for
p2->next= NULL;
free(p1);
return head;
}
STUDENT *converse(STUDENT *head)
{
if((head==NULL) ||(head->next == NULL)) return head;
STUDENT *p1,*p2;
p1 = NULL;
while(head!=NULL)
{
p2 = head->next;
head->next = p1;
p1 = head;
head = p2;
}
head = p1;
return head;
}
int main()
{
int n;
printf("how manystudents' information you want to input:");//11题
scanf("%d",&n);
STUDENT *ahead =input_student(n);
printf("These arestudents'informations:\n");
print(ahead);
ahead =converse(ahead);
printf("These arestudents'informations concersed:\n");
print(ahead);
return 0;
}
相关文章推荐
- 教材答案有错误P318_1112 将链表逆序排列,即将链头当链尾,链尾当链头
- 将一个链表按逆序排列,即将链头当链尾,链尾当链头。
- 将一个链表按逆序排列,即将链头当链尾,链尾当链头
- 将一个链表按逆序排列,即将链头当链尾,链尾当链头。
- P318_118 合并两个链表,并按照学号升序排列。用类冒泡排序法对链表进行排序
- 链表逆序(递归&非递归)/倒序输出链表值/用一个递增序列构建平衡二叉搜索树/用递归的方法判断数组是不是升(降)序排列
- 将链表逆序排列的一个程序及思考的对链表依某一元素排序方法
- 算法之链表逆序排列
- 线性单向链表的逆序排列算法一例
- 关于链表的逆序排列!
- 2. Add Two Numbers 给定的两个链表是逆序排列的,相加后放在一个新的链表里边
- 将一个链表按逆序排列
- 逆序带头结点的单向链表
- PAT02-1Reversing Linked List (25) 单链表逆序
- 单链表逆序
- 链表在存储器中紧凑地排列
- 数据结构:链表的基本操作(创建,删除,插入,逆序,摧毁)
- 逆序输出链表
- 链表逆序问题
- 基本算法—链表逆序