}
实验 1-1 顺序表的逆置操作
程序原码
// 创建顺序表,确定元素个数,插入各个元素,逆置列表。
#include<malloc.h> #define max_list_size 100 //定义给顺序表分配空间大小 typedef struct{
int *elem;
int length;
}list_node; //指向顺序表首地址的结构体单元
list_node L; // 这里使用了全局变量,在所有的函数里可以随意修改其值 int list[max_list_size]; void init();
void inversion();
void creat();
void display(); //*************
主函数 ****************** int main()
{
init();
creat();
printf("\n 您输入的顺序表的结点数 : \n"); display();
inversion();
printf("\n 倒置顺序表的结点数 : \n"); display();
void init() {
L.elem = (int *) malloc (max_list_size * sizeof(int) ); if (! L.elem) {
printf(" 顺序表已满 ");
exit(-1);
}
L.length = 0;
#include<stdlib.h>
#include<stdio.h> // 初始化操作 // 倒置部分 // 建表部分 // 显示部分 //* ************ 初始化操作分配空间 ******************
}
//*************
void creat(){
int a, b, i; printf(" 请输入顺序表的结点数 : "); scanf("%d", &a);
if(a<=0){
printf(" 顺序表个数要为正整数 ! 请重新输入 : "); scanf("%d",&a); }
if( a > max_list_size - 1 || a < 0 )
{
printf(" 分配失败 ,退出程序 ! \n");
exit(1);
}
for( i = 0; i != a; ++i)
{
printf(" 请输入第 %d 结点的值 : ", i+1); scanf("%d", &b);
L.elem[i] = b; ++L.length;
}
}以下为建表部分 ******************
//* ***************
以下为倒置部分 **********************
void
inversion(){
int a, b, i;
a = L.length; for( i = 1; i <= a/2; i++)
{
b = L.elem[i-1];
L.elem[i-1] = L.elem[a-i];
L.elem[a-i] = b;
}
} //****************
以下为显示部分 ********************** void display(){
int i; for( i = 1; i <= L.length; ++i)
printf("%d\t", L.elem[i-1]);
printf("\n");
实验1-1 测试结果
输入一个正数、
您输入的顺序表的結点数:
20
21 22 23 24 25 26 石宣®序耒的结点熬 26 25 24 23 22 21 20 Press any kev to continue 输入一个负数、
实验1-2
单链表的逆置操作
程序原码
//创建一个单链表,确定元素个数,插入各个元素,进行逆置操作,并输出。
#in elude <stdio.h>
#in elude <malloc.h>
#in elude <stdlib.h>
II 单链表的链式存储结构
typedef struct Node
{
int date;
7 :0 1 2 3 4 5 6 颉 2 2 2 2 2 2 2 弓■■二 值值值值值 的 翱点占苦^一^点
r
上口±口吉吉士口士口士口 一 h J 幺十言” .r 叮舍叮兰一^土幺亠 顺髦鬱鄴鬱 入入入入入入入人 ■■J —_HI;.,,.-r^n J Tr J IT J Tr 亠 Tr 丄.-rr 丄才-4-.才-l-.rr 主月主-R 主月圭启主冃主冃主冃主口 駐新输入: 一ttj^mffit 的的的点点点点 1 士 R 士 R 士
口
您输入的顺序表的结点数:
6
7 8 I 置顺序表的结点熱
7 t 5
'ress anu key ta cent inue
入吏
入入入
实验1-1 测试结果输入一个正数、
struct Node *n ext;
}LNode,*PLNode;
PLNode Creat_Link(); // 创建链表
void Treaver_Link(PLNode Head); //输出链表
void Reaverse_Link(PLNode Head); // 逆置链表
void main() {
PLNode Head;
Head=Creat_Link(); //创建链表
printf(" 您输入的单链表为: \n");
Treaver_Link(Head); //输出链表
Reaverse_Link(Head); //逆置链表printf(" 逆置后的的单链表为: \n");
Treaver_Link(Head); //输出链表
}
//* *********** 以下为单链表的创建部分**************
PLNode Creat_Link()
{
int i,t,y;
PLNode Head=(PLNode )malloc(sizeof(LNode));
PLNode tail;
PLNode New;
if(!Head){
exit(-1);
}
tail=Head;
Head->next=NULL;
printf(" 请输入链表的个数: "); scanf("%d",&t);
if(t<=0){
printf(" 链表个数要为正整数! 请重新输入: "); scanf("%d",&t);
}
for(i=0;i<t;i++){
printf(" 请输入第%d 个结点数据: ",i+1); scanf("%d",&y);
New=(PLNode )malloc(sizeof(LNode)); if(!New){ exit(-1);
}
New->date=y;
New->next=tail->next; tail->next=New; tail=New;
}
return Head; }
//************ 以下为单链表的逆置部分**************
void Reaverse_Link(PLNode Head) {
PLNode p,q; p=Head->next; Head->next=NULL;
while(p){
q=p->next; p->next=Head->next; Head->next=p;
p } return;
}
//************ 以下为单链表的显示部分**************
void Treaver_Link(PLNode Head) {
PLNode p;
if(!Head->next){
printf(" 链表为空退出程序!"); exit(-1);
}
p=Head->next;
while(p){
printf("%d\t",p->date); p=p->next;
}
printf("\n");
return;
实验1-2 测试结果 输入一个正数、 输入一个负数、。