[데이터 구조] 단일 체인 테이블
/*****************************************
Copyright (c) 2015 Jingshuang Hu
@filename:demo.c
@datetime:2015.09.18
@author:HJS
@e-mail:[email protected]
@blog:http://blog.csdn.net/hujingshuang
*****************************************/
#include "table.h"
/****************************************/
int main()
{
LinkList p = NULL;
int num = 0, pos = 0, value = 0, value1 = 0, value2 = 0;
List_Init(&p);
while(1)
{
List_Menu();
scanf("%d", &num);
switch(num)
{
case 1:
printf(" :");
scanf("%d", &pos);
printf(" :");
scanf("%d", &value);
List_Insert(p, pos, value);
break;
case 2:
printf(" :");
scanf("%d", &pos);
List_Delete_Pos(p, pos);
break;
case 3:
printf(" :");
scanf("%d", &value);
List_Delete_Elem(p, value);
break;
case 4:
printf(" :");
scanf("%d", &pos);
printf(" :");
scanf("%d", &value);
List_Replace_Pos(p, pos, value);
break;
case 5:
printf(" :");
scanf("%d", &value1);
printf(" :");
scanf("%d", &value2);
List_Replace_Elem(p, value1, value2);
break;
case 6:
printf(" :");
scanf("%d", &pos);
List_Find_Pos(p, pos);
break;
case 7:
printf(" :");
scanf("%d", &value);
List_Find_Elem(p, value);
break;
case 8:
List_Show_Length(p);
break;
case 9:
List_Destroy(p);
break;
case 10:
printf("
!
");
return 0;
break;
}
List_Show_All(p);
getchar();getchar();
system("cls");
}
return 0;
}
그 중에서 table. h 는 단일 체인 표 의 구조 체 정의 와 함수 성명 입 니 다. 코드 는 다음 과 같 습 니 다.
/*****************************************
Copyright (c) 2015 Jingshuang Hu
@filename:table.h
@datetime:2015.09.18
@author:HJS
@e-mail:[email protected]
@blog:http://blog.csdn.net/hujingshuang
*****************************************/
#ifndef _TABLE_H_
#define _TABLE_H_
/***************************************************/
#include <stdio.h>
#include <stdlib.h>
/***************************************************/
typedef struct node
{
int data;
struct node *next;
}Lnode, *LinkList;
/***************************************************/
void List_Menu(void);
void List_Init(LinkList *h);
void List_Insert(LinkList h, int pos, int value);
void List_Delete_Pos(LinkList h, int pos);
void List_Delete_Elem(LinkList h, int value);
void List_Find_Pos(LinkList h, int pos);
void List_Find_Elem(LinkList h, int value);
void List_Replace_Pos(LinkList h, int pos, int value);
void List_Replace_Elem(LinkList h, int value1, int value2);
void List_Show_All(LinkList h);
void List_Show_Length(LinkList h);
void List_Destroy(LinkList h);
/***************************************************/
#endif
table. c 는 table. h 함수 의 구체 적 인 실현 입 니 다. 코드 는 다음 과 같 습 니 다.
/****************************************************
Copyright (c) 2015 Jingshuang Hu
@filename:table.c
@datetime:2015.09.18
@author:HJS
@e-mail:[email protected]
@blog:http://blog.csdn.net/hujingshuang
****************************************************/
#include "table.h"
/***************************************************/
void List_Menu(void)
{
printf("
************ ************
");
printf("1.
");
printf("2. \t3.
");
printf("4. \t5.
");
printf("6. \t7.
");
printf("8. \t9.
");
printf("10.
");
printf("**********************************
");
printf(" :");
}
/***************************************************/
void List_Init(LinkList *h)//
{
*h = (LinkList)malloc(sizeof(Lnode));//
if (!h)
{
printf(" !
");
}
(*h)->next = NULL;//
}
/******************* ( )********************/
void List_Insert(LinkList h, int pos, int value)
{
LinkList p = h, q;
int i = 0;
if (!p->next && pos == 1)//
{
q = (LinkList)malloc(sizeof(Lnode));
if (!q)
{
printf(" !
");
}
q->data = value;
q->next = p->next;
p->next = q;
}
else
{
while(p->next && i < pos - 1)
{
p = p->next;
i++;
}
if (!p->next || i > pos - 1)
{
printf(" !
");
}
else
{
q = (LinkList)malloc(sizeof(Lnode));
if (!q)
{
printf(" !
");
}
q->data = value;
q->next = p->next;
p->next = q;
}
}
}
/******************** ***************************/
void List_Delete_Pos(LinkList h, int pos)
{
LinkList p = h, q;
int i = 0;
while(p->next && i < pos - 1)
{
p = p->next;
i++;
}
if (!p->next || i > pos - 1)
{
printf(" !
");
}
else
{
q = p->next;
p->next = q->next;
printf(" :%d
", q->data);
free(q);
}
}
/***************************************************/
void List_Delete_Elem(LinkList h, int value)
{
LinkList p = h, q;
int i = 0, flag = 0;
while(p->next)
{
if (p->next->data == value)
{
flag++;
q = p->next;
p->next = p->next->next;
free(q);
}
else
{
p = p->next;
}
}
if (flag)
{
printf(" %d !
", value);
}
else
{
printf(" %d
", value);
}
}
/********************** *************************/
void List_Replace_Pos(LinkList h, int pos, int value)
{
LinkList p = h->next;
int i = 0;
while(p && i < pos - 1)
{
p = p->next;
i++;
}
if (!p || i > pos - 1)
{
printf(" !
");
}
else
{
p->data = value;
}
}
/***************************************************/
void List_Replace_Elem(LinkList h, int value1, int value2)
{
LinkList p = h->next;
int flag = 0;
while(p)
{
if (p->data == value1)
{
flag++;
p->data = value2;
}
p = p->next;
}
if (flag)
{
printf(" %d %d
", value1, value2);
}
else
{
printf(" %d
", value1);
}
}
/******************** **************************/
void List_Find_Pos(LinkList h, int pos)
{
LinkList p = h->next;
int i = 0;
while(p && i < pos - 1)
{
i++;
p = p->next;
}
if (!p || i > pos - 1)
{
printf(" !
");
}
else
{
printf("%d
", p->data);
}
}
/***************************************************/
void List_Find_Elem(LinkList h, int value)
{
LinkList p = h->next;
int i = 0, flag = 0;
while(p)
{
i++;
if (p->data == value)
{
flag++;
printf("%d ", i);
}
p = p->next;
}
printf(" %d
", flag);
}
/******************** ***************************/
void List_Show_All(LinkList h)
{
LinkList p = h->next;
if (!p)
{
printf(" !
");
}
else
{
while(p)
{
printf("%d ", p->data);
p = p->next;
}
printf("
");
}
}
/***************************************************/
void List_Show_Length(LinkList h)
{
int len = 0;
LinkList p = h->next;
while(p)
{
len++;
p = p->next;
}
printf("length=%d
", len);
}
/********************** *************************/
void List_Destroy(LinkList h)
{
LinkList p = h, q;
while(p->next)
{
q = p->next;
p->next = q->next;
free(q);
}
}
상기 코드 가 완전 하여 모두 copy 로 사용 할 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
하나의 단일 체인 테이블의 순환과 귀속 실현을 반전시키다텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.