顺序表和单链表的就地逆置(源代码)

时间:2025-07-11

数据结构之C语言小练习,算法简单易懂

数据结构之顺序表和链表的就地逆置源代码

//顺序表和链表的就地逆置

#include<stdio.h>

#include<malloc.h>

#define maxsize 100

struct data //为链表的处理做结构体定义

{

int m;

data *next;

}; //子函数,每种数据结构两个函数,前者是顺序表,后者是链表 void display1(int a[],int num);

void inverse1(int a[],int num);

void display2(data *b,int num);

void inverse2(data *b,int num);

void main()

{

int i,num1,num2;

int a[maxsize];

data *b,*p,*q;

//顺序表的就地逆置

printf("请输入需要创建的顺序表的长度:\n");

scanf("%d",&num1);

printf("请输入顺序表的关键字:\n");

for(i=0;i<num1;i++)

{

fflush(stdin); //清除输入缓存

scanf("%d",&a[i]);

}

printf("创建的顺序表为:\n");

display1(a,num1);

inverse1(a,num1); //地址传递

printf("\n就地逆置后的顺序表:\n");

display1(a,num1);

//链表的就地逆置

printf(" \n请输入需要创建的链表的长度:\n");

scanf("%d",&num2);

printf("请输入链表的关键字:\n");

b=(data*)malloc(sizeof(data)); //申请内存空间

b->next=NULL; //链表含有头结点

q=b;

for(i=0;i<num2;i++)

{

p=(data*)malloc(sizeof(data));

数据结构之C语言小练习,算法简单易懂

fflush(stdin);

scanf("%d",&p->m);

p->next=q->next;

q->next=p;

q=q->next;

}

printf("创建的链表为:\n");

display2(b,num2);

inverse2(b,num2); //地址传递

printf("\n就地逆置后的链表:\n");

display2(b,num2);

}

void display1(int a[],int num)

{

int i;

for(i=0;i<num;i++)

{

printf("-%d-",a[i]);

}

}

void inverse1(int a[],int num)

{

int *p,*q,t;

p=&a[0]; //指向第一个数

q=&a[num-1]; //指向最后一个数

while(p<q) //算法是:前后指针所指的数值交换,然后向中间靠拢,直到p<q停止 {

t=*p;

*p=*q;

*q=t;

p++;

q--;

}

}

void display2(data *b,int num)

{

data *t;

t=b->next;

while(t!=NULL)

{

printf("-%d-",t->m);

t=t->next;

}

}

数据结构之C语言小练习,算法简单易懂

void inverse2(data *b,int num) {

data *p,*q;

int i,j,t;

for(i=1;i<=num-1;i++) {

p=b->next;

q=p->next;

for(j=num-i;j>0;j--) //算法类似于冒泡排序 {

}

}

}

t=p->m; p->m=q->m; q->m=t; p=p->next; q=q->next;

顺序表和单链表的就地逆置(源代码).doc 将本文的Word文档下载到电脑

    精彩图片

    热门精选

    大家正在看

    × 游客快捷下载通道(下载后可以自由复制和排版)

    限时特价:7 元/份 原价:20元

    支付方式:

    开通VIP包月会员 特价:29元/月

    注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
    微信:fanwen365 QQ:370150219