用C语言编写线性表的逆置的程序.

供稿:hz-xin.com     日期:2025-01-17
数据结构问题 C语言解答 线性表的就地逆置

//逆置顺序表中的元素的算法void SeqListReverse(SeqList *L){int temp,i;for(i=0;ilength/2;i++){temp=L->data[i];L->data[i]=L->data[L->length-1-i];L->data[L->length-1-i]=temp;}}/*逆置单链表中的元素的算法*/void LinkedListReverse(LinkedList L)//其中LinkedList等价于LNode *{LinkedList p,q;if(L->next && L->next->next){q=p=L->next;q=q->next;p->next=NULL;while(q){//每次循环将后一个结点变成新链表的第一个结点p=q;q=q->next;p->next=L->next;L->next=p;}}}上面的两个算法我都用完整的C源程序测试过了,没有问题的,希望这个对你有帮助哦,望采纳啊。如果你需要完整的源程序,请在评论里留言吧。

线性表通常都是用一维数组实现的,所以逆置线性表的过程与逆置一维数组过程完全相同。

楼主你好!
关于你的问题,我已经将代码实现如下,如有错误,请指正!谢谢!
#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
struct list{
int data;
struct list *next;
};
struct list*CreateList(int n){ //用于创建链表
struct list *head=NULL,*p,*q;
int i;
for(i=1;i<=n;i++){
p=(struct list*)malloc(sizeof(struct list));
printf("Please input the number:");
scanf("%d",&p->data);
if(head==NULL){head=p;}
else{q->next=p;}
q=p;
}
p->next=NULL;
return head;
}
void Output(struct list *head){ //用于将链表每个节点显示出来
while(head!='\0'){
printf("%d\n",head->data);
head=head->next;
}
}
struct list *Inverse(struct list *head){ //用于链表的逆转
struct list *p=NULL,*q;
while(head!=NULL){
q=p;
p=head;
head=head->next;
p->next=q;
}
head=p;
return head;
}
main(){
struct list *head;
head=CreateList(5);
head=Inverse(head);
Output(head);
getch();
}
希望我的回答对你有帮助!

#define maxsize 1000
typedef struct sqlist{
char data[maxsize];
int n;
}Sqlist;
main()
{
int i,j,t;
Sqlist a;
for(i=0;i<=maxsize/2;i++)
{
t=a.data[i];
a.data[i]=a.data[maxsize-i-1];
a.data[maxsize-i-1]=t;
}
for(i=0;i<maxsize;i++)
printf("%d\t",a.data[i]);
}

用C语言编写线性表的逆置的程序.
关于你的问题,我已经将代码实现如下,如有错误,请指正!谢谢!include<stdio.h> include<stdlib.h> include<conio.h> struct list{ int data;struct list *next;};struct list*CreateList(int n){ \/\/用于创建链表 struct list *head=NULL,*p,*q;int i;for(i=1;i<=n;i++){ p=(st...

线性表的就地逆置的程序代码怎么写?
要将该表逆置,可以将表中的开始结点与终端结点互换,第二个结点与倒数第二个结点互换,如此反复,就可将整个表逆置了。算法如下:\/\/ 表结构定义同上 void ReverseList( Seqlist *L){ Datatype t ; \/\/设置临时空间用于存放data int i;for ( i=0 ; i < L->length\/2 ; i++){ ...

.试分别用顺序表和单链表作为存储结构,实现将线性表(a0,a1,...an-1...
int tu; \/*非零元个数*\/ Triple data[MAXSIZE+1]; \/*非零元的三元组表,*\/ }Tabletype; \/*三元组线性表*\/ void out_matrix(Tabletype *); \/*输出 矩阵*\/ \/*以下为转置程序,将a所指矩阵转置,将结果存入b所指的矩阵中*\/ int TransposeSMatrix(Tabletype *,Tabletype *);int main( vo...

...顺序表的就地逆置,即在原表的存储空间将线性表(a1,a2,...an-1,a...
b=L->next;printf("\\n\\n逆置之后链表中的元素为:\\n");while(b){ printf("%d, ",b->data);b=b->next;} printf("\\n");return 0;} c编程高手团队正在招新,有意者速速行动,一起学习,一起努力!!!

...单链表作存储结构,编写一个实现线性表中元素逆置的算法
struct node *next;}sqlist;void disp1(sqlist *lq){ sqlist *t=lq;while(t!=NULL){printf("%d ",t->data); t=t->next; } } void disp2(sqlist *lq){ sqlist *t=lq;while(t->next!=NULL){printf("%d ",t->data); t=t->next; } } void main(){ sqlist *lq,*q,*...

数据结果,线性表的逆置
建议你输入一位数字,例如:1 2 3 4 5 6 7 8 -1 回车之后,程序完成逆转,并且现实逆转后的结果:87654321 你是不是一回车程序又回来了?其实程序是正确输出了结果的,可以选择菜单查看屏幕,或者再次运行查看结果,或者在main()的最后添加一个语句getchar()暂停屏幕。

...即利用原表的存储空间将线性表 (a1,a2,…,an)逆置为(a
struct list { elementype *elem;int length;int listsize;};\/\/建立链表 int initlist(list *l){ int i=0,x;l->elem=(elementype *)malloc(sizeof(elementype));if(!l->elem){ cout<<"建立链表失败"<<endl;return 1;} l->length=0;l->listsize=MAXSIZE;while(1){ cout<<"请...

有一个线性表(a1,a2,...,an),采用带头结点的单链表L存储.设计一算法将...
printf("%d ",c);return OK;} typedef struct Node { ElemType data;struct Node *next;}Node;typedef struct Node *LinkList; \/* 定义LinkList *\/ \/* 初始化顺序线性表 *\/ Status InitList(LinkList *L){ L=(LinkList)malloc(sizeof(Node)); \/* 产生头结点,并使L指向此头结点 *\/ if...

线性表的逆置、排序和查找
第一种情况,其实可以考虑用头插法,来实现逆置。下面的算法是基于头插法的思想,逆置链表的,仅供参考。LinkList anti_linklist(LinkList demo){ LInkList *p,*q;\/\/work pointer LinkList head;head=new LinkList();head->next=null;\/\/init head pointer p=demo->head->next;\/\/make p points...

试用一个算法,实现顺序表的就地逆置,
int a[n]; \/\/...for(int i=0;i<n\/2;i++){ int t=a[i];a[i]=a[10-i-1];a[10-i-1]=t;}