데이터 구조의 창고 정의 및 기본 조작 실현

12697 단어
드디어 데이터 구 조 를 공부 하고 정리 할 시간 이 생 겼 습 니 다. 얼마 전에 긴 장 했 던 프로젝트 들 이 있 었 습 니 다. 데이터 구 조 를 공부 할 시간 이 없 었 습 니 다. 이 제 는 조금 숨 을 쉴 수 있 게 되 었 습 니 다. 데이터 구조 가 재 미 있 었 습 니 다. 이틀 동안 창고 의 동 서 를 보고 정 리 를 했 습 니 다. 잘못된 부분 이 있 으 면 보고 싶 은 친구 가 지적 해 주 었 습 니 다.감격 해 마지 않다.
학습 에 따 르 면 스 택 은 일종 의 선형 데이터 구조 로 스 택 의 연산 은 표 의 한 부분 에서 만 진행 할 수 있 기 때문에 이런 데이터 구 조 는 '후진 선 출' 의 특징 을 가진다.
다음은 스 택 의 c 언어 구현 입 니 다.그 중에서 스 택 은 top 노드 와 bottom 노드 로 구성 되 는데 이 두 노드 는 각각 스 택 의 상단 과 아래쪽 을 가리킨다.그 중에서 창고 의 구성 결점 은 구조 체 로 이 루어 지고 구조 체 는 데이터베이스 와 다음 결점 을 가리 키 는 지침 역으로 구성 되 며 다음은 결점 의 c 언어 로 이 루어 진다.
1 /*
2          
3 */
4 typedef struct Node{
5     int data;
6     struct Node * pNext;
7 }NODE,* PNODE;

스 택 을 실현 하 는 결산 점 이 있 으 면 그 다음은 스 택 을 어떻게 실현 해 야 합 니까?
1 /*
2       ,           ,                      
3 */
4 typedef struct Strack{
5     PNODE pTop;
6     PNODE pBottom;
7 }STRACK,* PSTRACK;

스 택 의 기본 작업: 스 택 초기 화, 스 택 압축, 스 택 옮 겨 다 니 기, 스 택 나 가기 등 작업
 1 /*
 2         
 3             top bottom           ,              (        
 4          )。 
 5 */
 6 void init_strack(PSTRACK pS){
 7     pS->pTop=(PNODE)malloc(sizeof(NODE));   //       ,           ,   pTop      
 8     if(pS->pTop==NULL){
 9         printf("      ");
10         exit(-1);
11     } 
12     else{
13         pS->pBottom=pS->pTop;    // bottom top      ,       ,          
14         pS->pTop->pNext=NULL; 
15     }
16      
17 }
18 
19 /*
20     
21      “    、    ”   ,  ,        ,           
22   ,         top       ,                     。 
23 */
24 int push(PSTRACK pS,int val){
25     PNODE pNew=(PNODE)malloc(sizeof(NODE));  //       
26     if(pNew->pNext==NULL){
27         printf("      ");
28         exit(-1);
29     }
30     pNew->data= val;
31     pNew->pNext=pS->pTop;  //           ,   top         ,              pS->pTop      
32     pS->pTop=pNew;  // top        
33     return 0; //0    push   
34 }
35 
36 /*
37       
38         ,            ,              p,        ,
39                    ,      p=ps->pBottom 
40 */
41 void traverse(PSTRACK ps){
42     PNODE p=ps->pTop;  //                
43     while(p!=ps->pBottom){
44         printf("%d ", p->data);
45         p=p->pNext;  //                  
46     } 
47     printf("
"); 48 return; 49 } 50 51 52 /* 53 54 , true 55 , false 56 */ 57 bool isEmpty(PSTRACK ps){ 58 if(ps->pTop==ps->pBottom){ 59 return true; 60 } 61 else{ 62 return false; 63 } 64 } 65 66 /* 67 : , ps->pTop ( ), 68 69 */ 70 bool pop(PSTRACK ps,int *pVal){ 71 if(isEmpty(ps)){ // , , false 72 return false; 73 } 74 else{ 75 PNODE p=ps->pTop; // , , 76 ps->pTop=p->pNext; // top 77 *pVal=p->data; 78 free(p); // 79 p=NULL; 80 return true; 81 } 82 }

상술 한 것 은 창고 에 대한 기본 적 인 조작 을 실 현 했 기 때문에 물론 구체 적 인 응용 은 구체 적 인 알고리즘 요 구 를 보아 야 한다.

좋은 웹페이지 즐겨찾기