首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

大家帮看看 编写一个将顺序表L中元素逆置的算法。并只允许增加一个附加的工作空间解决方案

2012-03-05 
大家帮看看 编写一个将顺序表L中元素逆置的算法。并只允许增加一个附加的工作空间// 顺序表逆序.cpp : Defi

大家帮看看 编写一个将顺序表L中元素逆置的算法。并只允许增加一个附加的工作空间
// 顺序表逆序.cpp : Defines the entry point for the console application.
//

#include "stdafx.h"

#include "stdafx.h"
#include<iostream>
#include"malloc.h"
#include"stdio.h"
using namespace std;
typedef char ET;
typedef int Status;
typedef int ElemType ;
#define ListIncrement 4
#define List_Init_Size 12
#define OK 1
#define ERROR 0
#define TRUE 1
#define FALSE 0
#define OVERFLOW 2
typedef struct {
ET *elem;
int length;
int ListSize;
}SqList;
Status InitList(SqList *L){
L->elem=(ET*)malloc(List_Init_Size*sizeof(ET));
if(L->elem==NULL)
exit(OVERFLOW);
L->length=0;
L->ListSize=List_Init_Size;
  memset(L->elem+L->ListSize-1, 0, L->ListSize);

  return OK;
}
Status ListInsert(SqList*L,int i,ET e){
ET *p;
ET *q;
if(i<0||i>L->length+1)
exit(OVERFLOW);
if (L->length >= L->ListSize) {
p=(ET*)realloc(L->elem,(L->ListSize+ListIncrement)*sizeof(ET));
memset(p+L->ListSize, 0, ListIncrement);

if(p==NULL)exit(OVERFLOW);
L->elem=p;

L->ListSize+=ListIncrement;
}
q=L->elem+i;
  for(p=L->elem+L->length-1;p>=q;p--){
*(p+1)=*p;

}
*q=e;
  return OK;
}

Status Init(SqList*L){
ET e;
int i;
InitList(L);
for(i=0;i<=L->ListSize;i++){
L->length++;
scanf("%c",&e);
if(e=='\n')
{
break;
}
ListInsert(L,i,e);
}
for (i=0;i<L->length;i++){
printf("%c",L->elem[i]);

}
  printf("\n");
  return OK;
}

Status nixu(SqList*L)
{
  ET*P;
  P=(ET*)malloc(sizeof(ET));
  int e=0;
  int i;
 
  while(e!=L->length-1)
  {
  for (i=L->length-1;i>0;i--)
  {
if (i==L->length-1)
{
*P=L->elem[L->length-1];
 
}
L->elem[i]=L->elem[i-1];
  }
  L->elem[e]=*P;
  e++;
 // printf("%c",L->elem[j]);
  }
 
  for (int j=0;j<L->length;j++)
  {
  printf("%c",L->elem[j]);
 
  }
  printf("\n");
return OK;
}

int main()
{
SqList L1;
printf("请输入顺序表L1元素:");
InitList(&L1);
Init(&L1);
//fflush(stdin);
nixu(&L1);

return 0;
}


[解决办法]
递归和非递归的解法如下:

C/C++ code
struct Node{    Node* next;    int i;};Node* reverse_list(Node* header){    if (header->next != NULL)    {        Node* new_next = reverse_list(header->next);        new_next->next = header;        header->next = NULL;    }    return header;}Node* reverse_list_non_r(Node* header){    Node* curr = NULL, *next = header;    while(next != NULL)     {        Node* next_next = next->next;        next->next = curr;        curr = next;        next = next_next;    }    return curr;} 

热点排行