チェーンテーブルシミュレーションキューquene---C言語

5657 ワード

1、チェーンテーブルは先頭ノードと非先頭ノードの2種類に分けられる.
2、ヘッダノードのデータドメインはデータを保存しない;
3、チェーンテーブルにヘッドノードを追加する理由:最初の位置に要素を挿入して削除する操作を他の位置と同じにする.
4、よくある試験の結果:
①手書きチェーンテーブル、
②チェーンテーブルの作成(挿入、削除、破壊、逆順など)を行う
③チェーンテーブルシミュレーションスタック、
④チェーンテーブルシミュレーションキュー、
⑤チェーンテーブルがリングになっているか、
⑥2つのチェーンテーブルが交差しているかどうかを判断する
 
先頭ノードでないチェーンテーブルシミュレーションスタックquene:
/*********************************************************************************
 *      Copyright:  (C) 2018 Yujie
 *                  All rights reserved.
 *
 *       Filename:  linker_quene.c
 *    Description:  This file 
 *                 
 *        Version:  1.0.0(08/27/2018)
 *         Author:  yanhuan 
 *      ChangeLog:  1, Release initial version on "08/27/2018 12:47:42 PM"
 *                 
 ********************************************************************************/

#include 
#include 
#include 


typedef  struct  node
{
    int          data;
    struct node *next;
}NODE_t,*NODE_p;

typedef  struct  quene    //    
{
    struct node *front;   //  
    struct node *rear;    //  
}quene_t,*quene_p;


quene_p   create_linker_quene(quene_p  que)    //        
{
    int     length,n = 1;
    NODE_p   Np_now = NULL;
    que->front = NULL;
    que->rear  = NULL;

    printf("Please input the init length of quene you want to creat : 
"); scanf("%d",&length); while(n <= length) { NODE_p s = (NODE_p)malloc(sizeof(NODE_t)); printf("Please input the No.%d num : ",n); scanf("%d",&s->data); s->next = NULL; if(1 == n) { Np_now = s; que->front = Np_now; que->rear = Np_now; } else { Np_now->next = s; Np_now = s; que->rear = Np_now; } n++; } return que; } quene_p insert_quene(quene_p que,int data) // { NODE_p s = (NODE_p)malloc(sizeof(NODE_t)); s->data = data; s->next = NULL; if(NULL == que->front) { que->front = s; que->rear = s; } else { que->rear->next = s; que->rear = s; } printf("Insert data:%d successful
",s->data); return que; } quene_p delete_quene(quene_p que) { NODE_p Np_now = que->front; if(NULL == Np_now) { printf("The quene has no element
"); return que; } if(Np_now == que->rear) { que->front = NULL; que->rear = NULL; printf("Delete data:%d successful
",Np_now->data); return que; } que->front = que->front->next; printf("Delete data:%d successful
",Np_now->data); free(Np_now); return que; } quene_p destory_quene(quene_p que) { NODE_p Np_now = que->front; while(Np_now != NULL) { que->front = que->front->next; free(Np_now); Np_now->next = NULL; Np_now = que->front; } que->front = NULL; que->rear = NULL; printf("Destory finished
"); return que; } void travel(quene_p que) { int n = 1; NODE_p Np_now = que->front; if(Np_now == NULL) { printf("The quene has no element
"); return ; } while(Np_now != NULL) { printf("The NO.%d data of quene is %d
",n,Np_now->data); Np_now = Np_now->next; n++; } printf("Travel finished

"); } void print_desc_main() { printf("Please input the selection number you want:
"); printf("1 create quene
"); printf("2 insert quene node
"); printf("3 delete quene node
"); printf("4 travel quene
"); printf("5 destory quene
"); printf("6 exit
"); } void print_desc_insert() { printf("what do you want to insert:
"); } int main (int argc, char **argv) { int i=0,data; quene_t quene_n; quene_p que = (quene_p)&quene_n; que->front = NULL; que->rear = NULL; // que = create_linker_quene(que); while(1) { print_desc_main(); scanf("%d",&i); switch(i) { case 1: if(que->front == NULL) { que = create_linker_quene(que); } else printf("The quene is exist
"); break; case 2: print_desc_insert(); scanf("%d",&data); que = insert_quene(que,data); break; case 3: que = delete_quene(que); break; break; case 4: travel(que); break; case 5: que = destory_quene(que); break; case 6: que = destory_quene(que); printf("Quit
"); return 0; default: printf("Incorrect input
"); print_desc_main(); break; } } return 0; }

 
先頭に立って結ぶのはもっと簡単で、ここではコードを貼らない.