[데이터 구조] 단일 체인 테이블

코드 가 실 현 된 단일 체인 시트 의 일반적인 조작 은 다음 과 같다.(코드 에 사용자 정의 table. h 가 호출 되 었 습 니 다. 뒤에 있 습 니 다)
/***************************************** 
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 로 사용 할 수 있 습 니 다.

좋은 웹페이지 즐겨찾기