C言語関係掲示板

過去ログ

No.1117 リストに対し操作を行う

[戻る] [ホームページ]
No.1918

リストに対し操作を行う
投稿者---ses(2004/06/04 16:45:56)


キーボードから行いたい操作を選択してリストの操作を
行うプログラムを作っているのですが。


/*
//pが指すセルの次にxのセルを追加
struct cell *insert(int x, struct cell *p, struct cell *init)
{
struct cell *p *r;

r = (struct  cell *)malloc(sizeof(struct cell));
if(p == NULL) {q = init; init = r;}
else {q = p->next; p->next = r;}
r->element = x;r->next = q;
return(init);


このような感じでやってるのですが

locate 要素xの位置を返す
find i番目のセルの内容を返す
last リストの最後の位置を返す
display リストの要素を順に表示する
・・・の操作プログラムがわかりません。
はじめてで多いですがよろしくお願いします


No.1919

Re:リストに対し操作を行う
投稿者---あかま(2004/06/04 18:49:30)


リスト操作は基本的に同じなので、過去ログ見たほうが早いですよ。

あと、一行に2文書くのは必要がなければ止めた方がいいです。
見難いので。
貼り付けるプログラムは長くなってもOKですので。


No.1932

Re:リストに対し操作を行う
投稿者---RAPT(2004/06/05 02:13:03)


仕様が分からないからテキトーに。
Windows2000sp4/VC++6.0sp6/Console-App

#include <stdio.h>
#include <stdlib.h>

#define NOT_FOUND (-1)

typedef struct cell{
  struct cell *next;
  int element;
} CELL;

// 要素xの位置を返す
CELL* locate(CELL* init, int x)
{
  CELL* ptr = init;
  while( ptr && ptr->element != x ){
    ptr = ptr->next;
  }
  return ptr;
}

// i番目のセルの内容を返す
int find(CELL* init, int i)
{
  CELL* ptr = init;
  for(; ptr && i > 0; --i){
    ptr = ptr->next;
  }
  return ptr ? ptr->element : NOT_FOUND;
}

// リストの最後の位置を返す
CELL* last(CELL* init)
{
  CELL* ptr = init;
  while( ptr->next ){
    ptr = ptr->next;
  }
  return ptr;
}

// リストの要素を順に表示する
void display(CELL* init)
{
  CELL* ptr = init;
  int i = 0;
  for(; ptr; ++i ){
    printf("[%3d] %3d\n", i, ptr->element);
    ptr = ptr->next;
  }
}

//pが指すセルの次にxのセルを追加
CELL* insert(CELL* init, CELL* p, int x)
{
  CELL* r = (CELL*)malloc(sizeof(CELL));
  if(r == NULL){
    perror(NULL);
    exit(1);
  }
  r->element = x;
  if(p == NULL){
    r->next = init;
    init = r;
  }else {
    r->next = p->next;
    p->next = r;
  }
  return init;
}

void term(CELL* init)
{
  CELL* ptr = init;
  while( ptr ){
    init = init->next;
    free(ptr);
    ptr = init;
  }
}

int main()
{
  CELL* init = {0};

  init = insert(init, NULL, 3);
  init = insert(init, init, 75);
  init = insert(init, init, 12);
  init = insert(init, init, 48);
  display(init);
  printf("find(1) = %d\n", find(init, 1));

  term(init);

  return 0;
}



No.1933

Re:リストに対し操作を行う
投稿者---ses(2004/06/05 04:37:11)


あかまさん>
ありがとうございます、過去ログも見通したのですがキーワードの選択間違ったかなぁ過去ログはこれからよく見るから慣れないとな・・・

RAPTさん>
うあ・・・こんなに詳しく・・・
最初からポインタのことについてよくわからなかったので一行ずつ確かめていきたいと思います、ありがとうございました