当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 1 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 数据结构队列结构,queue structure,无它,仅作备份
帖子发表于 : 2008-07-07 19:28 
头像

注册: 2006-09-21 14:28
帖子: 2376
送出感谢: 0 次
接收感谢: 0 次
代码:
//  special line structure | queue
//  linked storage form

//  Last Modified: 2008-07-07

#include <stdio.h>
#include <lee/stdiol.h>
#include <stdlib.h>


typedef struct node
{
  int data;
  struct node *next;
} node;

typedef struct
{
  node *front;
  node *rear;
} queue;


void enqueue(queue *q)
{
  node *tmp = (node *)malloc(sizeof(node));
 
  if (NULL == tmp)
  {
    perror("malloc");
    return;
  }
 
  tmp->next = NULL;
 
  printf("\n data: ");
  tmp->data = getchar();
  flush();
 
  q->rear->next = tmp;
  q->rear = tmp;
 
  //  free(tmp);
}


void dequeue(queue *q)
{
  node *tmp;
 
 
  if (q->front == q->rear)
  {
    printf("\n empty ");
    return;
  }
 
  tmp = (node *)malloc(sizeof(node));
 
  if (NULL == tmp)
  {
    perror("malloc");
    return;
  }
 
  tmp = q->front->next;
  q->front->next = tmp->next;
  if (q->rear == tmp)
    q->rear = q->front;
  free(tmp);
}

void get_head(queue *q)
{
  if (q->front == q->rear)
  {
    printf("\n empty ");
    return;
  }
 
  printf("\n Queue Head: %c ", q->front->next->data);
}


void print(queue *q)
{
  node *tmp;
 
  if (q->front == q->rear)
  {
    printf("\n empty ");
    return;
  }
 
  tmp = (node *)malloc(sizeof(node));
  tmp = q->front;
  printf("\n");
  while (tmp != q->rear)
  {
    tmp = tmp->next;
    printf(" | %c", tmp->data);
  }
  printf(" |");
}


int main()
{
  //  void create(queue *q);
  void enqueue(queue *q);
  void print(queue *q);
  void get_head(queue *q);
 
  int key;
  queue *q;
  node *n;
  q = (queue *)malloc(sizeof(queue));
  n = (node *)malloc(sizeof(node));
 
  printf("\n");
  printf("\n    Special Line Structure | Queue - Linked Storage Form ");
 
  printf("\n");
  printf("\n  init ... ");
  q->front = q->rear = n;
 
  while (1)
  {
    printf("\n");
    printf("\n 1. create ");
    printf("\n");
    printf("\n 2. enqueue ");
    printf("\n 3. dequeue ");
    printf("\n 4. get head ");
    printf("\n");
   
    printf("\n 5. print ");
    printf("\n");

    printf("\n 0|q quit ");
    printf("\n");
    printf("\n   ");
   
    key = getchar();
    flush();
   
    switch (key)
    {
      case '1':
        printf("\n\n continue ");
        getch();
        break;
      case '2':
        printf("\n");
        printf("\n  enqueue ");
        printf("\n");
        enqueue(q);
        printf("\n\n continue ");
        getch();
        break;
      case '3':
        printf("\n");
        printf("\n  dequeue ");
        printf("\n");
        dequeue(q);
        printf("\n\n continue ");
        getch();
        break;
      case '4':
        printf("\n");
        printf("\n  get head ");
        printf("\n");
        get_head(q);
        printf("\n\n continue ");
        getch();
        break;
       
      case '5':
         printf("\n");
         printf("\n  print ");
         printf("\n");
         print(q);
        printf("\n\n continue ");
        getch();
        break;

      case 'q':
      case '0':
        goto QUIT_FLAG;
    }
  }

  QUIT_FLAG:
 
  return 0;
}


// /usr/include/lee/stdiol.h
代码:
#ifndef __STDIOL_H__
#define __STDIOL_H__

#include <stdio.h>
#include <stdlib.h>


int getch(void)
{
  int key;
 
  system("stty raw");
  //  stty - change and print terminal line settings
  //  raw - same as -ignbrk -brkint -ignpar -parmrk  -inpck  -istrip  -inlcr
 
  key = getchar();
 
  system("stty cooked");
  //  cooked - same  as  brkint ignpar istrip icrnl ixon opost isig icanon,
  //           eof and eol characters to their default values
 
  return key;
}


void flush()
{
   int c;
   
   while ((c = getchar() != '\n') && c != EOF) ;
}


#endif


_________________
http://lee.youxu.info/


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 1 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译