2011-03-05 8 views
1

リストを削除し、フロントエンドとバックエンドリストを追加して新しいリストを生成したいと思います。ここでリンクリストからのリストの削除と追加

forall([X8,X9],implies(connected(X8,X9),exists([V],and(or(equal(h_1(X8),U),equal(h_2(X8),U)),connected(U,X9))) 

すべてのシンボルは、次のとおりです。私のような言葉を持っているこれら二つの構造を使用して

typedef struct term { 
    SYMBOL symbol; 
    union { 
     LIST termlist; 
     struct term* term; 
    } super; 
    LIST args; 
    NAT stamp; 
    NAT size; 
} *TERM, TERM_NODE; 

typedef struct LIST_HELP { 
    struct LIST_HELP *cdr; 
    POINTER   car; 
} LIST_NODE; 

typedef LIST_NODE *LIST; 

:私は、次の2つの構造を持っています。 forallがシンボルの場合、残りはforallの引数として動作するとします。 Termで構成された種類のTermです。私はこれから[V]を削除し、それの前後にリストを追加したいと思います。どうすればいいのか教えていただけますか?

+0

あなたの 'term'構造体では、' LIST'はどこに定義されていますか? 'POINTER'は' LIST_HELP'構造体でどこに定義されていますか? – Davidann

+0

LIST_HELPはリンクされたリストです。言い換えれば、argsはリストです。これはLIST args.soとして定義されています。したがって、用語はシンボルとその引数として構築されます。 – thetna

答えて

1

おそらく宿題;あなたがリストLIST l1を持っていると言うと、それはl1->cdrによってcdrです。今:あなたが何をしたいかリストから1つのエントリを削除するには、そのような現在のCDRとCDRのCDRを設定されている:

l1->cdr = (l1->cdr)->cdr; 

あなたが効果的にl1->cdrに以前いたエントリを削除しました。あなたがしなければならないことは、以前の値l1->cdrを覚えているので、それによって使用されるメモリを解放することができます。

関連する問題