#include "stdio.h"
#include"stdlib.h"
#define elemtype int
#define maxsize 1000
typedef enum Status{
success,fail
}Status;
//顺序表
typedef struct Sqlist{
elemtype elem[maxsize];
int length;
}Sqlist,*SqlistPtr;
SqlistPtr Sq_init(SqlistPtr slist){
Status s;
slist = (SqlistPtr)malloc(sizeof(Sqlist));
slist->length = 0;
return slist;
}
void Sq_insert(SqlistPtr slist,elemtype n1,int i){
if(slist->length == maxsize || i >= maxsize)
{
printf("越界!");
}
else
{
slist->length++;
for(int j = slist->length-1; j>=i ;j--)
{
slist->elem[j] = slist->elem[j-1];
}
slist->elem[i] = n1;
}
}
//链表
typedef struct Node{
elemtype el;
struct Node *next;
}Node,*NodePtr;
typedef struct List{
NodePtr head;
int length;
}List,*ListPtr;
ListPtr List_init(ListPtr l){
Status s;
l = (ListPtr)malloc(sizeof(List));
l->length = 0;
l->head = NULL;
l->head = (NodePtr)malloc(sizeof(Node));
l->head->next = NULL;
return l;
}
void List_insert(ListPtr l,elemtype n,int pos){
l->length++;
int flag = l->length;
if(pos > flag)
printf("越界");
else{
NodePtr p,q;
q = (NodePtr)malloc(sizeof(Node));
q->el = n,q->next = NULL;
int i = 1;
p = l->head;
while (i<pos)
{
p = p->next;
i++;
}
q->next = p->next;
p->next = q;
}
}
int main(){
//顺序表
SqlistPtr s1;
s1 = Sq_init(s1);
//链表
ListPtr s2;
s2 = (List_init(s2));
int elenum;
scanf("%d",&elenum);
int f1;
for(int i = 0;i < elenum; i++)
{
scanf("%d",&f1);
Sq_insert(s1,f1,i);
int j = i+1;
List_insert(s2,f1,j);
}
//倒置
int mid;
for(int i = 0;i < elenum/2 ; i++)
{
mid = s1->elem[i];
s1->elem[i] = s1->elem[elenum-i-1];
s1->elem[elenum-i-1] = mid;
}
for(int i=0;i<elenum;i++)
printf("%d ",s1->elem[i]);
printf("\n");
//链表倒置
NodePtr p,q;
p=s2->head->next;
s2->head->next=NULL;
while(p){
q=p;
p=p->next;
q->next=s2->head->next;
s2->head->next=q;
}
p = s2->head->next;
while(p){
printf("%d ",p->el);
p = p->next;
}
return 0;
}
noj2;线性表就地逆置
最新推荐文章于 2023-04-08 10:38:52 发布