C语言 如何按顺序将元素从一个链表移动到另一个链表



我需要做的是复制已经填充了这些值的链表list1:

0000001  3  
0000002  2  
0000003  1  
0000004  1  

并使用函数 CreateMenuList(( 将它们粘贴到另一个名为 list2 的列表中,这样 list2 的每个元素都有 list1 的成员匹配一个特定的数字,ViewAllMenu(( 的输出应该是这样的:

1    
0000004
0000003
2
0000002
3
0000001

现在我刚刚写了这个基本概念:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Order { 
char code[8];
int menu;
};
typedef struct NodeO {
struct Order order;
struct NodeO *next;
} TNode;
typedef TNode * NodeO;
struct Menu {
int code;
NodeO orders_list;
};
typedef struct NodeM {
struct Menu menu;
struct NodeM * next;
} TNodeM;
typedef TNodeM * NodeM;
//this function is for creating nodes for list1
NewOrder(struct Order p, NodeO * pp)
{
NodeO temp;
temp = malloc(sizeof(struct NodeO));
temp->order = p;
temp->next = *pp;
*pp = temp;
}
void main()
{
NodeO list1 = NULL;
NodeM list2 = NULL;
//supposing list1 is already filled
CreateMenuList(list1,list2);
ViewAllMenu(lista2);
}

假设我们已经使用一个使用 stdin 调用NewOrder的函数填充了list1,那么CreateMenuList函数应该做什么来修改list2并创建n成员来存储与菜单匹配的所有订单?ViewAllMenu并不是真正的问题,因为它应该是一个简单的 while 循环,带有printf

这些是所需的所有功能:

void Load(NodeO * p)
{
FILE *f;
struct Order s;
char * buffer = malloc(sizeof(struct Order));
if(!(f=fopen("test.txt", "r")))
{
perror("Errore");
exit(EXIT_FAILURE);
}
while(fgets(buffer,sizeof(struct Order), f))
{
if(sscanf(buffer, "%s%d", s.code, &s.menu) == 2 )
{
NewOrder(s,p);
}
}
free(buffer);
fclose(f);
}
void InsertOrder(NodeM * pp, struct Order p)
{
NodeM  s;
s = *pp;
while(s != NULL && (s->menu.code != p.menu))
s = s->next;
if( s == NULL)
{
s = (NodeM)malloc(sizeof(TNodeM));
s->next = *pp;
*pp = s;
s->menu.code = p.menu;
s->menu.list = NULL;
}
NewOrder(p, &s->menu.list);
}
void CreateMenuList(NodeO p, NodeM * pp)
{
while(p != NULL)
{
InsertOrder(pp, p->order);
p = p->next;
}
}

void ViewAllMenu(NodeM p)
{
NodeO s;
while(p != NULL)
{
s = p->menu.list;
printf("%dn", p->menu.code);
while(s != NULL)
{
printf("t%sn", s->order.code);
s = s->next;
}
p = p->next;
}
}

相关内容

  • 没有找到相关文章

最新更新