| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1052 人关注过本帖
标题:[求助]线性表小问题
只看楼主 加入收藏
bjtusq
Rank: 2
来 自:BJTU
等 级:论坛游民
帖 子:141
专家分:20
注 册:2006-8-5
收藏
 问题点数:0 回复次数:7 
[求助]线性表小问题
请大虾们帮忙写个小程序
分别用顺序表和单链表作为存储结构,实现将线性表(a0,a1,...an-1)就地逆置的操作,所谓"就地"指辅助空间应为O(1)。

谢谢了
搜索更多相关主题的帖子: 线性表 空间 单链 
2006-10-28 22:24
jjlyy
Rank: 1
等 级:新手上路
帖 子:9
专家分:0
注 册:2006-10-23
收藏
得分:0 

对顺序表直接写个swap的函数就可以了吧~
对链表弄几个指针从后往前一个个插进去就行了吧~

2006-10-28 22:32
bjtusq
Rank: 2
来 自:BJTU
等 级:论坛游民
帖 子:141
专家分:20
注 册:2006-8-5
收藏
得分:0 
楼上大哥能否给点代码看看啊
谢谢了

[url][/url]
2006-10-28 22:37
C语言学习者
Rank: 4
等 级:贵宾
威 望:13
帖 子:1278
专家分:0
注 册:2006-9-26
收藏
得分:0 
在数据结构有

谁有强殖装甲第二部,可以Q我460054868
2006-10-28 22:38
bjtusq
Rank: 2
来 自:BJTU
等 级:论坛游民
帖 子:141
专家分:20
注 册:2006-8-5
收藏
得分:0 
是吗?
我去看看

[url][/url]
2006-10-28 22:40
unicorn
Rank: 4
等 级:贵宾
威 望:14
帖 子:1066
专家分:0
注 册:2005-10-25
收藏
得分:0 

//先定义一个顺序表,例如
typedef struct{
int list[100];
int size;
}L;

//建立...给各个节点赋值

//然后逆置
int temp;//一个辅助空间
for(int i=0;i<L.size/2;i++)
{
temp=L->list[i];
L->list[i]=L->list[L.size-i-1];
L->list[L.size-i-1]=temp;
}

//...

//链表..结构自己写吧 建立好了 给节点赋值
//逆置
void converse(node* head)
{
node *p,*q;
p=head->next;
head->next=NULL;
while(p!=NULL){
q=p;
p=p->next;
q->next=head->next;
head->next=q;
}


unicorn-h.spaces. ◇◆ sava-scratch.spaces.  noh enol ! pue pu!w hw u! shemle aq ll!m noh 
2006-10-28 22:47
zhufeifei
Rank: 1
等 级:新手上路
威 望:2
帖 子:402
专家分:0
注 册:2006-8-11
收藏
得分:0 

这是我在网上看到你说的原题:
1. 顺序表:
  要将该表逆置,可以将表中的开始结点与终端结点互换,第二个结点与倒数第二个结点互换,如此反复,就可将整个表逆置了。算法如下:

// 顺序表结构定义同上题

 void ReverseList( Seqlist *L)
  {
   DataType temp ; //设置临时空间用于存放data
   int i;
   for (i=0;i<=L->length/2;i++)//L->length/2为整除运算
    { temp = L->data[i]; //交换数据
     L -> data[ i ] = L -> data[ L -> length-1-i];
     L -> data[ L -> length - 1 - i ] = temp;
    }
  }

2. 链表:
  分析:
  可以用交换数据的方式来达到逆置的目的。但是由于是单链表,数据的存取不是随机的,因此算法效率太低。可以利用指针改指来达到表逆置的目的。具体情况入下:
  (1)当链表为空表或只有一个结点时,该链表的逆置链表与原表相同。
  (2)当链表含2个以上结点时,可将该链表处理成只含第一结点的带头结点链表和一个无头结点的包含该链表剩余结点的链表。然后,将该无头结点链表中的所有结点顺着链表指针,由前往后将每个结点依次从无头结点链表中摘下,作为第一个结点插入到带头结点链表中。这样就可以得到逆置的链表。算法是这样的:
  结点结构定义如下:
    typedef char DataType; //假设结点的数据域类型的字符
    typedef struct node{ //结点类型定义
      DataType data; //结点的数据域
      struct node *next;//结点的指针域
     }ListNode;
    typedef ListNode *LinkList;
    ListNode *p;
    LinkList head;

  LinkList ReverseList( LinkList head )
   {// 将head 所指的单链表(带头结点)逆置
    ListNode *p ,*q ;//设置两个临时指针变量
    if( head->next && head->next->next)
     { //当链表不是空表或单结点时
      p=head->next;
      q=p->next;
      p -> next=NULL; //将开始结点变成终端结点

      while (q)
       { //每次循环将后一个结点变成开始结点 
        p=q;
        q=q->next ;
        p->next = head-> next ;
        head->next = p;
       }
      return head;
     }
    return head; //如是空表或单结点表,直接返回head
   }


在不断的拼搏与进取中,定能创造一片天地!
2006-10-28 23:12
bjtusq
Rank: 2
来 自:BJTU
等 级:论坛游民
帖 子:141
专家分:20
注 册:2006-8-5
收藏
得分:0 
实在太感谢了
我一定好好看
争取看明白

[url][/url]
2006-10-28 23:42
快速回复:[求助]线性表小问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.014745 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved