C言語でチェーンテーブルの作成、削除、検索、挿入を実現
16990 ワード
C言語でチェーンテーブルの作成、削除、検索、挿入を実現
重要な知識点の紹介:一:
いくつかの関数パラメータの前に&番号があります:&番号はアドレスを取って、変数のポインタを伝達して、パラメータに1つの変数のアドレスを得させて、この時パラメータの変数は実パラメータの変数のユニットを指して、もし私達が&番号の変数を持つ変数に対して変更を行うならば、主関数の中で相応の変数もいっしょに変化します
2:
ノードを定義するとき、LNode*p、linklist pの意味は同じです.
三:すべてのコードは以下の通りです.
重要な知識点の紹介:一:
1|Status ListInsert_L(linklist &L,int i,ElemType e)// i e
いくつかの関数パラメータの前に&番号があります:&番号はアドレスを取って、変数のポインタを伝達して、パラメータに1つの変数のアドレスを得させて、この時パラメータの変数は実パラメータの変数のユニットを指して、もし私達が&番号の変数を持つ変数に対して変更を行うならば、主関数の中で相応の変数もいっしょに変化します
2:
typedef struct LNode
{
ElemType data;
struct LNode *next;
} LNode ,*linklist;
ノードを定義するとき、LNode*p、linklist pの意味は同じです.
三:すべてのコードは以下の通りです.
#include
#include
#define ERROR 0
#define OK 1
typedef int Status;
typedef int ElemType;
typedef struct LNode
{
ElemType data;
struct LNode *next;
} LNode ,*linklist;
void CreateList_L(linklist &L,int n)
{
L= (linklist) malloc (sizeof(LNode));
L->next = NULL;
int i;
LNode *p;
for (i=n;i>0;i--)
{
p=(linklist) malloc (sizeof(LNode));
scanf ("%d",&(p->data));
p->next=L->next;L->next=p;
}
}
void OutputLNode(linklist L)
{
/*LNode *p = L->next;//
while (p)
{
printf("%d ",p->data);
p = p->next;
}*/
L=L->next;
while (L)
{
printf ("%d ",L->data);
L=L->next;
}
//
}
Status GetElem_L(linklist L,int i,ElemType &e) // i
{
LNode *p;
int j;
p=L->next;//
j=1;// ,
while (p&&j<i)// , p i p
{
p=p->next;
++j;
}
if (!p||j>j) return ERROR;//
e = p->data;
return OK;
}
Status ListInsert_L(linklist &L,int i,ElemType e)// i e
{
LNode *p,*s;
int j=0;
p=L;
while (p&&j<i-1)
{
p=p->next;++j;
}
if (!p||j<i-1) return ERROR;
s= (linklist)malloc(sizeof(LNode));
s->data= e;
s->next= p->next;p->next = s;
return OK;
}
Status ListDelete_L(linklist &L,int i,ElemType &e)// i , e
{
LNode *p,*q;
int j=0;
p=L;
while (p->next&&j<i-1)// i
{
p=p->next ;
++j;
}
if (!(p->next)||j>i-1) return ERROR;//
q=p->next ; p->next = q->next;
e = q->data;
free(q);
return OK;
}
int main()
{
LNode *L;
//printf (" some number");
CreateList_L(L,4);
printf (" :
");
OutputLNode(L);
ElemType e;
GetElem_L(L,2,e);
printf (" 56 :
");
ListInsert_L(L,2,56);
OutputLNode(L);
printf (" :
");
ListDelete_L(L,3,e);
OutputLNode(L);
system("pause");
return OK;
}