C言語データ構造はチェーンテーブルの逆順序と出力を実現する

5967 ワード

C言語データ構造はチェーンテーブルの逆順序と出力を実現する
チェーンテーブルを逆シーケンスして出力します.私は2つの方法で実現しました.1つ目は新しい空のチェーンテーブルを借りました.2つ目は,元のチェーンテーブルに基づいて直接逆シーケンスを実現することである.
インスタンスコード:
ヘッダファイル:

#include  
#include  
#include  

typedef int ElemType; 
typedef struct Node 
{//     
 ElemType value;    //   
 struct Node *next;//    
}Node,*ptr_Node; 

typedef struct LinkList 
{//     
 ptr_Node head; //        
 ptr_Node tail;//        
 int length;  //     
}LinkList,*ptr_LinkList; 

ptr_LinkList CreateList(void) 
{//        
 ptr_LinkList linklist; 
 linklist=(LinkList *)malloc(sizeof(LinkList)); 
 if(!linklist) 
 { 
  printf("allocation failed.
"); } linklist->head=NULL; linklist->tail=NULL; linklist->length=0; return linklist; } bool IsListEmpty(ptr_LinkList linklist) {// if(linklist->length==0) { return true; } return false; } void InsertListHead(ptr_LinkList linklist,ElemType element) {// element ptr_Node ptr_node; ptr_node=(Node *)malloc(sizeof(Node)); // if(!ptr_node) { printf("allocation failed.
"); } else { ptr_node->value=element; if(linklist->length==0) { linklist->head=ptr_node; linklist->tail=linklist->head; linklist->tail->next=NULL; } else { ptr_node->next=linklist->head; linklist->head=ptr_node; // } linklist->length++; // 1 } } void InsertListTail(ptr_LinkList linklist,ElemType element) { ptr_Node ptr_node; ptr_node=(Node *)malloc(sizeof(Node)); // if(!ptr_node) { printf("allocation failed.
"); } else { ptr_node->value=element; if(linklist->length==0) { linklist->head=ptr_node; linklist->tail=linklist->head; linklist->tail->next=NULL; } else { linklist->tail->next=ptr_node; linklist->tail=ptr_node; // } linklist->length++; // 1 } } void InsertListPosition(ptr_LinkList linklist,int pos,ElemType element) { int i; ptr_Node ptr_node; ptr_Node temp_ptr_node; if(pos<1 || pos>linklist->length) { printf("The insert position is invalidate.
"); } else { ptr_node=(Node *)malloc(sizeof(Node)); // if(!ptr_node) { printf("allocation failed.
"); } ptr_node->value=element; if(pos==1) { InsertListHead(linklist,element); } else if(pos==linklist->length) { InsertListTail(linklist,element); } else { temp_ptr_node=linklist->head; for(i=1;inext; } ptr_node->next=temp_ptr_node->next; temp_ptr_node->next=ptr_node; linklist->length++; } } } void Destroy(ptr_LinkList linklist) {// ptr_Node p=linklist->head; ptr_Node q; while(p) {// q=p->next; free(p); p=NULL; p=q; } } void Traverse(ptr_LinkList linklist) {// ptr_Node p; p=linklist->head; while(p) { printf("%4d",p->value); p=p->next; } }

ヘッダファイルにはチェーンテーブルのいくつかの基本的な操作が実現されています.必要なものもあれば、必要でないものもあります.
実装コード:

#include "stdafx.h" 
#include "LinkList.h" 
#include  

ptr_LinkList InvertList(ptr_LinkList list) 
{//                    
 ptr_LinkList inverted_linklist; 
 ptr_Node p; 
 p=list->head; 
 inverted_linklist=CreateList();//        
 while(p) 
 {// list                  ,       
  InsertListHead(inverted_linklist,p->value); 
  p=p->next; 
 } 
 return inverted_linklist; 
} 

void InvertLinkList(ptr_LinkList linklist) 
{//              ,        
 ptr_Node p,q,r,m; 
 m=p=linklist->head; 
 q=p->next; 
 r=q->next; 
 while(r) 
 {//              
  q->next=p; 
  p=q; 
  q=r; 
  r=r->next; 
 } 
 q->next=p; //         
 linklist->head=q; 
 linklist->tail=m; 
 linklist->tail->next=NULL; 
} 

int _tmain(int argc, _TCHAR* argv[]) 
{ 
 ptr_LinkList linklist; 
 ptr_LinkList list; 
 linklist=CreateList(); 
 if(linklist) 
 { 
  printf("We have created a new linklist.
"); } InsertListHead(linklist,12); InsertListHead(linklist,35); InsertListHead(linklist,66); InsertListHead(linklist,06); InsertListHead(linklist,11); InsertListHead(linklist,54); InsertListHead(linklist,79); Traverse(linklist); printf("
"); printf("The first method:
"); list=InvertList(linklist); Traverse(list); printf("
"); printf("The second method:
"); InvertLinkList(linklist); Traverse(linklist); printf("
"); getch(); return 0; }

読書に感謝して、みんなを助けることができることを望んで、みんなの当駅に対する支持に感謝します!