码迷,mamicode.com
首页 > 编程语言 > 详细

数据结构c语言版 队列

时间:2016-04-23 16:37:04      阅读:177      评论:0      收藏:0      [点我收藏+]

标签:

队列

(1)队列是一种先进先出的线性表

(2)只能从队头进行删除,从队尾进行插入

技术分享

 

(一)链队列

(1)需要一个指向头结点的头指针和一个指向尾结点的尾指针

(2)通常为了操作的方便起见,都会给链队添加一个头结点,头结点不存数据。

(3)有头结点的链队列判空的条件是头指针和尾指针都指向头结点

 

技术分享

 

链队列的实现代码

 

 1 #include<stdio.h>
 2 #include<stdlib.h>
 3 #define STACK_INIT_SIZE 100
 4 #define STACKINCREMENT 10
 5 typedef int Status;
 6 #define OK 1
 7 #define ERROR 0
 8 typedef struct QNode
 9 {
10     char data;
11     struct QNode *next;
12 }QNode, *QueuePtr;
13 
14 typedef struct {
15     QueuePtr front;
16     QueuePtr rear;
17 }LinkQueue;
18 
19 //创建队列
20 void InitQueue(LinkQueue *Q)
21 { /* 构造一个空队列Q */
22     (*Q).front = (*Q).rear = (QueuePtr)malloc(sizeof(QNode));
23     if (!(*Q).front) exit(0);
24     (*Q).front->next = NULL;
25 }
26 
27 //入队
28 void EnQueue(LinkQueue *Q, char e)
29 { /* 插入元素e为Q的新的队尾元素 */
30     QueuePtr p = (QueuePtr)malloc(sizeof(QNode));
31     if (!p)  exit(0);  /* 存储分配失败 */
32     p->data = e;        p->next = NULL;
33     (*Q).rear->next = p;   (*Q).rear = p;
34 }
35 
36 //出队
37 void DeQueue(LinkQueue *Q, char *e)
38 { /* 若队列不空,删除Q的队头元素,用e返回其值,并返回OK,否则返回ERROR */
39     QueuePtr p;
40     if ((*Q).front == (*Q).rear)   exit(0); /* 空队列退出 */
41     p = (*Q).front->next;
42     *e = p->data;
43     (*Q).front->next = p->next;
44     if ((*Q).rear == p)  (*Q).rear = (*Q).front;
45     free(p);
46 }
47 
48 //输入队列内容
49 void printfQueue(LinkQueue Q)
50 {
51     QueuePtr p;
52     p = Q.front->next;
53     while (p)
54     {
55         printf("%c  ", p->data);
56         p = p->next;
57     }
58     printf("\n");
59 }
60 
61 int main()
62 {
63     LinkQueue Q;
64     char e;
65     InitQueue(&Q);
66 
67     int num, i;
68     char a,c;
69     printf("输入入队元素个数:\n");
70     scanf("%d", &num);
71     c = getchar();
72     printf("输入入队元素:\n");
73 
74     for (i = 0; i < num; i++){
75         scanf("%c", &a);
76         c = getchar();
77         EnQueue(&Q, a);
78     }
79     printf("队里的元素为:");
80     printfQueue(Q);
81     printf("出队顺序为:");
82     for (i = 0; i < num; i++){
83         DeQueue(&Q, &e);
84         printf("%c  ",e);
85     }
86     system("pause");
87     return 0;
88 }

 

数据结构c语言版 队列

标签:

原文地址:http://www.cnblogs.com/cdoublej/p/5424753.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!