【问题标题】:How can I sort for character and number in c?如何在c中对字符和数字进行排序?
【发布时间】:2014-05-24 21:05:28
【问题描述】:

我正在使用队列和结构。我想使用入队函数和结构变量。然后我根据他们的字符和数量对列表进行排序。例如:

我有 3 个字符:

1-A

2-C

3-G

C 是最重要的值。 C 总是列表的第一个元素。在C之后,G很重要,然后是A。

而且数字也是从小到大排序的。

我的结构应该看:

struct n{
    char i;
    int a;
    struct n *next;
} 

而且我必须使用入队功能。它看起来像:

void enqueue (char i,int a);

我的主要是这样的:

enqueue(C,5);
enqueue(C,1);
enqueue(A,0);
enqueue(G,7);
enqueue(A,5);
enqueue(G,3);

我的输出是这样的:

C1 C5 G3 G7 A0 A5 

我该怎么做?

【问题讨论】:

  • 字母排名如何?是否只有 C、G 和 A,且 C
  • C > G > A @templatetypedef
  • enqueuen 的成员函数吗?还是在其他地方定义?
  • 简而言之,对出现在 C G A 顺序中,每个子序列(“C”,如果你愿意的话)按升序排序)。并且您的代码中没有输出(就此而言)几乎是代码)。到目前为止你做了什么?
  • 哦,既然如此,那就自建吧one of these

标签: c list data-structures queue


【解决方案1】:

我认为您陈述角色优先级的顺序与您的陈述不一致。无论如何,您为什么要使用队列来存储非 FIFO 顺序的东西?您正在寻找的是一个链表。

我会这样想……

您有两种类型的列表,一种是按优先级排序的一组字符(您事先知道顺序 - 在我们的例子中是 C > G > A)。所以从三个列表开始,每个 char 一个,每个列表指向另一个数字列表。

# Initially you will have:
HEAD --> [ C: [] ] --> [ G: [] ] --> [ A: [] ] --> NULL
enqueue(C,5);
HEAD --> [ C: [5] ] --> [ G: [] ] --> [ A: [] ] --> NULL
enqueue(C,1);
HEAD --> [ C: [1, 5] ] --> [ G: [] ] --> [ A: [] ] --> NULL
enqueue(A,0);
HEAD --> [ C: [1, 5] ] --> [ G: [] ] --> [ A: [0] ] --> NULL
enqueue(G,7);
HEAD --> [ C: [1, 5] ] --> [ G: [7] ] --> [ A: [0] ] --> NULL
enqueue(A,5);
HEAD --> [ C: [1, 5] ] --> [ G: [7] ] --> [ A: [0, 5] ] --> NULL
enqueue(G,3);
HEAD --> [ C: [1, 5] ] --> [ G: [3, 7] ] --> [ A: [0, 5] ] --> NULL

您还可以实现一个排序功能,首先按数字排序:

# Unsorted list
stack -> {c,5} -> {c,1} -> {a,0} -> {g,7} -> {a,5} -> {g,3} -> NULL

# Sort by numbers
stack -> {a,0} -> {c,1} -> {g,3} -> {c,5} -> {a,5} -> {g,7} -> NULL

# sort by your specific letter order, you would need to check 
# c > g > a etc
stack -> {c,1} -> {c,5} -> {g,3} -> {g,7} -> {a,0} -> {a,5} -> NULL

【讨论】:

  • 有订单的队列很常见:en.wikipedia.org/wiki/Priority_queue
  • 当然!我曾(错误地?)假设这是一个要求实现队列(本质上是 prioQ)的问题,并且只是试图在没有实际指向源的情况下将操作推向该方向:)
  • @sabhiram 我必须使用 enqueue 进行排序
  • 所以你的意思是当项目被排入结构时,它们应该以正确的顺序放置?或者它们可以按任何顺序排列,并且在打印时被解析为正确的顺序?它是哪一个?一个是问:如何实现 enqueue 以便它们按顺序添加,另一个是问如何对 {char, int} 节点的链表进行排序。
  • @sabhiram 他们正确排序然后打印。我不知道如何排序 char 和 int 在节点中:/
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-02-13
  • 1970-01-01
  • 2013-11-21
  • 2012-09-13
  • 1970-01-01
  • 2011-12-27
  • 2013-06-18
相关资源
最近更新 更多