精华内容
下载资源
问答
  • 队列的实现

    2014-05-21 11:11:00
    队列也是常用的数据结构之一,下面给出一个链式队列的实现~~ 头文件Queue.h [cpp]view plaincopy #ifndefQueue_H #defineQueue_H ...typedefstructnode*PNode; typedefstructnode { ...

    队列也是常用的数据结构之一,下面给出一个链式队列的实现~~

    头文件Queue.h

    [cpp] view plaincopy
     
    1. #ifndef Queue_H  
    2. #define Queue_H  
    3.   
    4. typedef int Item;  
    5. typedef struct node * PNode;  
    6. typedef struct node  
    7. {  
    8.     Item data;  
    9.     PNode next;  
    10. }Node;  
    11.   
    12. typedef struct  
    13. {  
    14.     PNode front;  
    15.     PNode rear;  
    16.     int size;  
    17. }Queue;  
    18.   
    19. /*构造一个空队列*/  
    20. Queue *InitQueue();  
    21.   
    22. /*销毁一个队列*/  
    23. void DestroyQueue(Queue *pqueue);  
    24.   
    25. /*清空一个队列*/  
    26. void ClearQueue(Queue *pqueue);  
    27.   
    28. /*判断队列是否为空*/  
    29. int IsEmpty(Queue *pqueue);  
    30.   
    31. /*返回队列大小*/  
    32. int GetSize(Queue *pqueue);  
    33.   
    34. /*返回队头元素*/  
    35. PNode GetFront(Queue *pqueue,Item *pitem);  
    36.   
    37. /*返回队尾元素*/  
    38. PNode GetRear(Queue *pqueue,Item *pitem);  
    39.   
    40. /*将新元素入队*/  
    41. PNode EnQueue(Queue *pqueue,Item item);  
    42.   
    43. /*队头元素出队*/  
    44. PNode DeQueue(Queue *pqueue,Item *pitem);  
    45.   
    46. /*遍历队列并对各数据项调用visit函数*/  
    47. void QueueTraverse(Queue *pqueue,void (*visit)());  
    48.   
    49. #endif  


    实现代码Queue.c如下:

    [cpp] view plaincopy
     
    1. #include"Queue.h"  
    2. #include<malloc.h>  
    3. #include<stdio.h>  
    4.   
    5. /*构造一个空队列*/  
    6. Queue *InitQueue()  
    7. {  
    8.     Queue *pqueue = (Queue *)malloc(sizeof(Queue));  
    9.     if(pqueue!=NULL)  
    10.     {  
    11.         pqueue->front = NULL;  
    12.         pqueue->rear = NULL;  
    13.         pqueue->size = 0;  
    14.     }  
    15.     return pqueue;  
    16. }  
    17.   
    18. /*销毁一个队列*/  
    19. void DestroyQueue(Queue *pqueue)  
    20. {  
    21.     if(IsEmpty(pqueue)!=1)  
    22.         ClearQueue(pqueue);  
    23.     free(pqueue);  
    24. }  
    25.   
    26. /*清空一个队列*/  
    27. void ClearQueue(Queue *pqueue)  
    28. {  
    29.     while(IsEmpty(pqueue)!=1)  
    30.     {  
    31.         DeQueue(pqueue,NULL);  
    32.     }  
    33.   
    34. }  
    35.   
    36. /*判断队列是否为空*/  
    37. int IsEmpty(Queue *pqueue)  
    38. {  
    39.     if(pqueue->front==NULL&&pqueue->rear==NULL&&pqueue->size==0)  
    40.         return 1;  
    41.     else  
    42.         return 0;  
    43. }  
    44.   
    45. /*返回队列大小*/  
    46. int GetSize(Queue *pqueue)  
    47. {  
    48.     return pqueue->size;  
    49. }  
    50.   
    51. /*返回队头元素*/  
    52. PNode GetFront(Queue *pqueue,Item *pitem)  
    53. {  
    54.     if(IsEmpty(pqueue)!=1&&pitem!=NULL)  
    55.     {  
    56.         *pitem = pqueue->front->data;  
    57.     }  
    58.     return pqueue->front;  
    59. }  
    60.   
    61. /*返回队尾元素*/  
    62.   
    63. PNode GetRear(Queue *pqueue,Item *pitem)  
    64. {  
    65.     if(IsEmpty(pqueue)!=1&&pitem!=NULL)  
    66.     {  
    67.         *pitem = pqueue->rear->data;  
    68.     }  
    69.     return pqueue->rear;  
    70. }  
    71.   
    72. /*将新元素入队*/  
    73. PNode EnQueue(Queue *pqueue,Item item)  
    74. {  
    75.     PNode pnode = (PNode)malloc(sizeof(Node));  
    76.     if(pnode != NULL)  
    77.     {  
    78.         pnode->data = item;  
    79.         pnode->next = NULL;  
    80.           
    81.         if(IsEmpty(pqueue))  
    82.         {  
    83.             pqueue->front = pnode;  
    84.         }  
    85.         else  
    86.         {  
    87.             pqueue->rear->next = pnode;  
    88.         }  
    89.         pqueue->rear = pnode;  
    90.         pqueue->size++;  
    91.     }  
    92.     return pnode;  
    93. }  
    94.   
    95. /*队头元素出队*/  
    96. PNode DeQueue(Queue *pqueue,Item *pitem)  
    97. {  
    98.     PNode pnode = pqueue->front;  
    99.     if(IsEmpty(pqueue)!=1&&pnode!=NULL)  
    100.     {  
    101.         if(pitem!=NULL)  
    102.             *pitem = pnode->data;  
    103.         pqueue->size--;  
    104.         pqueue->front = pnode->next;  
    105.         free(pnode);  
    106.         if(pqueue->size==0)  
    107.             pqueue->rear = NULL;  
    108.     }  
    109.     return pqueue->front;  
    110. }  
    111.   
    112. /*遍历队列并对各数据项调用visit函数*/  
    113. void QueueTraverse(Queue *pqueue,void (*visit)())  
    114. {  
    115.     PNode pnode = pqueue->front;  
    116.     int i = pqueue->size;  
    117.     while(i--)  
    118.     {  
    119.         visit(pnode->data);  
    120.         pnode = pnode->next;  
    121.     }  
    122.           
    123. }  


    简单测试程序Test.c

    [cpp] view plaincopy
     
      1. #include"Queue.h"  
      2. #include<stdio.h>  
      3. void print(Item i)  
      4. {  
      5.     printf("该节点元素为%d\n",i);  
      6. }  
      7. main()  
      8. {  
      9.     Queue *pq = InitQueue();  
      10.     int i,item;  
      11.     printf("0-9依次入队并输出如下:\n");  
      12.     for(i=0;i<10;i++)  
      13.     {  
      14.         EnQueue(pq,i);  
      15.         GetRear(pq,&item);  
      16.         printf("%d ",item);  
      17.     }  
      18.   
      19.     printf("\n从队头到队尾遍历并对每个元素执行print函数:\n");   
      20.     QueueTraverse(pq,print);  
      21.   
      22.     printf("队列中元素依次出队列并输出如下:\n");  
      23.     for(i=0;i<10;i++)  
      24.     {  
      25.         DeQueue(pq,&item);  
      26.         printf("%d ",item);  
      27.     }  
      28.     ClearQueue(pq);  
      29.     if(IsEmpty(pq))  
      30.         printf("\n将队列置空成功\n");  
      31.     DestroyQueue(pq);  
      32.     printf("队列已被销毁\n");  
    1. http://blog.csdn.net/hopeyouknow/article/details/6736987

    转载于:https://www.cnblogs.com/wuyuankun/p/3740844.html

    展开全文
  • c语言 队列代码解释

    2017-02-25 17:43:00
    #include<stdio.h> #include<stdlib.h> ...typedefstructnode*PNode;/*定义队列的每个节点的类型*/ typedefstructnode{ intdata;//每个节点中存放的数据 PNodenext;//下一节点 ...
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
     
    typedef struct node * PNode; /*定义队列的每个节点的类型*/
    typedef struct node {
        int data;//每个节点中存放的数据
        PNode next;//下一节点
    }Node;
     
    typedef struct queue {
        PNode head;//队头
        PNode tail;//队尾
        int Length;//队列长度
    }Queue;
     
    Queue *GetQueue() { // 返回创建的新空队列
        Queue *queue = (Queue *)malloc(sizeof(Queue));  //创建存放队列的空间,字节大小为Queue,字针(32位系统)是4字节,int是4字节,那么node结构体就是8字节,queue就是8+8+4=20字节的
        queue->head = (Node *)malloc(sizeof(Node));  //创建头指针结点的存放空间
        queue->head->next = NULL;   //头指针指向空指针
        queue->tail = queue->head;  //令队列的尾指针为队列的头指针,这是为了在第一个元素入队时,头指针的字针能够指向第一个元素。
        queue->Length = 0;
        return queue;
    }
     
    void EnQueue(Queue *Q,int x) { // 将x送入队,每次都是在队尾加入新结点
        PNode newnode = (Node *)malloc(sizeof(Node));//产生新的结点
        newnode->data = x;  //新的结点数据域存放输入的x
        ++Q->Length;   //队列长度加一
        newnode->next = NULL;   //新产生的结点指向空指针
        Q->tail->next = newnode;  // 队尾指针指向新结点,当第一个元素x进来的时候,队尾指针相当于队头指针,那么也就是队头指针指向第一个进来的元素
        Q->tail = newnode; //接着就是队尾变成了刚刚进来的新结点,以此类推,下一个进来的新结点(假设为y)便是头结点指向x,x指向y,y指向nul
    }
     
    int notEmpty(Queue *Q) {
        return (Q->Length > 0);
    }
     
    int DeQueue(Queue *Q,int *x) { // 将x送出队
        PNode p;            //定义结点指针p
        if(notEmpty(Q)) {
            p = Q->head->next;   //  p的地址是头指针所指的下一个地址,也就是第一个元素的地址
            *x = p->data;   //访问p的地址,取该地址的数据域的数据
            Q->head->next = p->next;  //此时,将头指针指向p的下一个地址,即第二个元素。下一次调用函数便是p值为第二个(y),以此类推第三个、第四个。。。直到尾指针指向空指针结束
            --Q->Length;  //队列长度减一
            free(p);   //释放p的空间,此时p的地址也就是队列里面结点的地址
            return 1;
        }
        return 0;
    }
     
    int GetLength(Queue *Q) { // 获取队列长度
        return Q->Length;
    }
     
    int GetFirst(Queue *Q) { // 获取队头数据
        return Q->head->next->data;
    }
     
    int GetLast(Queue *Q) { // 获取队尾数据
        return Q->tail->data;
    }
     
    void ClearQueue(Queue *Q) {
        Q->tail = Q->head;
        Q->Length = 0;
    }
     
    void DestroyQueue(Queue *Q) {
        PNode q,p = Q->head;
        while(p) {
            q = p;
            p = q->next;
            free(q);
        }
        Q->head = Q->tail = NULL;
        free(Q);
        Q = NULL;
    }
     
    int main() {
        int i,n = 10,x;
        Queue *Q = GetQueue();//定义一个新的队列
        srand(time(0));  //用于rand()产生随机数的前提,播种,播下time(0),那么每次运行程序得到的种子不同,产生的随机数列也就不同。
        for(i = 0; i < n; ++i) {
            x = rand() % 100;//产生一个不大于100的随机数
            printf("%d ",x);
            EnQueue(Q,x);//x送进队列
        }
        printf("\n");
        while(notEmpty(Q)) {//判断没有空队列
            DeQueue(Q,&x);//出队列
            printf("%d ",x);
        }
        printf("\n");
        return 0;
    }

    转载于:https://www.cnblogs.com/cxy931980808/p/6442318.html

    展开全文
  • 第 6 章 树和二叉树 这一章的重点是二叉树 通过本章的习题可以在机器上运行程序,以验证二叉树...二叉树的存储结构采用二叉链表,结构如下所示 #defineDATATYPE2char typedefstructnode1 {DATATYPE2data; structnode1lchi
  • 队列的链式存储

    2019-09-28 13:08:11
    typedefstructNode*PtrToNode; structNode{/*队列中的结点*/ ElementTypeData; PtrToNodeNext; }; typedefPtrToNodePosition; structQNode{ PositionFront,Rear;/*队列的头、尾...
    1. typedef struct Node *PtrToNode;
    2. struct Node { /* 队列中的结点 */
    3.     ElementType Data;
    4.     PtrToNode Next;
    5. };
    6. typedef PtrToNode Position;
    7.  
    8. struct QNode {
    9.     Position Front, Rear;  /* 队列的头、尾指针 */
    10.     int MaxSize;           /* 队列最大容量 */
    11. };
    12. typedef struct QNode *Queue;
    13.  
    14. bool IsEmpty( Queue Q )
    15. {
    16.     return ( Q->Front == NULL);
    17. }
    18.  
    19. ElementType DeleteQ( Queue Q )
    20. {
    21.     Position FrontCell; 
    22.     ElementType FrontElem;
    23.      
    24.     if  ( IsEmpty(Q) ) {
    25.         printf("队列空");
    26.         return ERROR;
    27.     }
    28.     else {
    29.         FrontCell = Q->Front;
    30.         if ( Q->Front == Q->Rear ) /* 若队列只有一个元素 */
    31.             Q->Front = Q->Rear = NULL; /* 删除后队列置为空 */
    32.         else                     
    33.             Q->Front = Q->Front->Next;
    34.         FrontElem = FrontCell->Data;
    35.  
    36.         free( FrontCell );  /* 释放被删除结点空间  */
    37.         return  FrontElem;
    38.     }
    39. }

    转载于:https://www.cnblogs.com/lzdxh027/p/11317934.html

    展开全文
  • 数据结构-单链表

    2019-09-28 16:50:31
    Code#include<stdio.h>#include<stdlib.h>#defineflag0typedefstructnode{intdata;structnode*next;...
    ContractedBlock.gifExpandedBlockStart.gifCode
    #include<stdio.h>            
    #include
    <stdlib.h>            
    #define flag 0            
    typedef 
    struct node            
    {            
    int data;            
    struct node *next;            
    } LNode,
    *LinkList;            
    LinkList InitLinkList()            
    {            
    LinkList L;            
    LNode 
    *s;            
    int x;            
    L
    ->data=NULL;            
    L
    ->next=NULL;            
    scanf(
    "%d",&amp;x);            
    while(x!=flag)            
    {            
    s
    =(LNode*)malloc(sizeof(LNode));            
    s
    ->data=x;            
    s
    ->next=L;            
    L
    =s;            
    scanf(
    "%d",&amp;x);            
    }            
    return L;            
    }            
    void DispLinkList(LinkList L)            
    {            
    LNode 
    *p=L;            
    while(p->next!=NULL)            
    {            
    printf(
    "%5d",p->data);            
    p
    =p->next;            
    }            
    printf(
    "\n");            
               
    }            
    LNode 
    *LocLinkList(LinkList L,int pos)            
    {            
    LNode 
    *p=L;            
    int j=0;            
    while(p->next&amp;&amp;j<pos)            
    {p
    =p->next;            
    j
    ++;            
    }            
    if(j==pos)            
    return p;            
    else           
    return NULL;            
    }            
    int InsLinkList(LinkList L,int pos,int e)            
    {            
    LNode 
    *p=L,*s;            
    p
    =LocLinkList(L,pos-1);            
    if(p==NULL)            
    {            
    printf(
    "haha,error");            
    return 0;            
    }            
    else           
    {            
    s
    =(LNode*)malloc(sizeof(LNode));            
    s
    ->data=e;            
    s
    ->next=p->next;            
    p
    ->next=s;            
    return 1;            
    }            
    }            
    int DelLinkList(LinkList L,int pos)            
    {            
    LinkList p,s;            
    p
    =LocLinkList(L,pos-1);            
    if(p==NULL)            
    {printf(
    "there is no data");            
    return -1;            
    }            
    else           
    if (p->next==NULL)            
    {printf(
    "there is no data");            
    return 0;            
    }            
    else           
    {            
    s
    =p->next;            
    p
    ->next=s->next;            
    free(s);            
    }            
    return 1;            
    }            
    void menu()            
    {            
    printf(
    "0----exit\n");            
    printf(
    "1----locate\n");            
    printf(
    "2----insert\n");            
    printf(
    "3----delete\n");            
    }            
               
    void main()            
    {            
    LinkList head;            
    LNode 
    *temp;            
    int MenuNumber;            
    int pos,e;            
    printf(
    "please input the initData:\n");            
    head
    =InitLinkList();            
    DispLinkList(head);            
    menu();            
    scanf(
    "%d",&amp;MenuNumber);            
    while (MenuNumber!=0)            
    {            
    switch(MenuNumber)            
    {            
    case 1:            
    printf(
    "please input what you want to locate:\n");            
    scanf(
    "%d",&amp;pos);            
    temp
    =LocLinkList(head,pos);            
    printf(
    "%d\n",temp->data);            
    break;            
    case 2:            
    printf(
    "please input what you want to insert:\n");            
    scanf(
    "%d%d",&amp;pos,&amp;e);            
    InsLinkList(head,pos,e);            
    DispLinkList(head);            
    break;            
    case 3:            
    printf(
    "please input what you want to delete:\n");            
    scanf(
    "%d",&amp;pos);            
    DelLinkList(head,pos);            
    DispLinkList(head);            
    break;            
    default:printf("error,^^^\n");            
    }            
    scanf(
    "%d",&amp;MenuNumber);            
    }            

    转载于:https://www.cnblogs.com/fancing/archive/2009/11/22/1608293.html

    展开全文
  • 展开全部//我以前写过C语言的#include#include#include#defineNULL0typedefstructNODE{floatcoef;//系数intexpn;//指数structNODE*next;}NODE;NODE*Creat(intn);voidprint(N...
  • #include#include#include#define MaxSize 100...typedefstructnode{ElemType data;//数据类型struct node *lchild;//指向左孩子struct node *rchild;//指向右孩子}BTNode;void CreateBTNode(BTNode *&b,char...
  • 3.1.3栈的链接实现

    2019-10-08 23:38:31
    //DataStructTest.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#include<iostream.h>#include<malloc.h>typedefstructnode{intdata;structno...
  • 2.3-线性表的链接实现

    2019-10-08 23:38:27
    //DataStructTest.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#include<iostream.h>#include<malloc.h>typedefstructnode*pointer;structnode{...
  • //DataStructTest.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#include<iostream.h>#include<malloc.h>typedefstructnode*pointer;structnode{...
  • #include<stdio.h>...typedefstructNode { DataTypedata; structNode*LChild; structNode*RChild; }BiTNode,*BiTree; voidCreateBiTree(BiTree*bt)//先序创建二叉树 { charch; ch...
  • 攻防世界PWN之Supermarket题解

    千次阅读 2019-11-15 22:20:53
    Supermarket 首先,看一下程序的保护机制。看起来还不错 然后,我们用IDA分析一下 ...分析出程序大概有这样...typedefstructNode{ charname[16]; intprice; intdescription_size; char*description; }Node;...
  • #include<stdio.h> ...typedefstructNode { DataTypedata; structNode*LChild; structNode*RChild; }BiTNode,*BiTree; voidCreateBiTree(BiTree*bt)//构建二叉树 { charch; ch=...
  • typedefstructNode{ intelem; structnode * next; }node,*LinkList;   对于LinkList L: L是指向定义的node结构体的指针,可以用->运算符来访问结构体成员,即L->elem,...
  • 对单链表进行遍历、查找、插入、删除等操作,最终效果如下:相关C代码如下:/*线性表的链式存储之单链表的尾插法*/#...typedefstructnode{//定义链表结点数据结构DataTypedata;structnode*pNext;}NODE;typedefNOD...
  • 1程序源代码:#include#include#include#include#include#defineNULL0typedefstructNode{intm;//密码intn;//序号structNode*next;}Node,*Linklist;Linklistcreate(intz)//生成循环单链表并返回,z为总人数{inti,mm;...
  • C简单队列实现

    2016-11-01 21:44:15
    #include #include #defineMAX20 //类型 typedefstructnode{ intdata[MAX]; inthead; inttail; }queue_t; //创建 voidcreate_queue(queue_t*queue)
  • 链表的基本操作

    2019-10-04 17:08:20
    #include<stdlib.h> #include<stdio.h> typedefstructnode { intdata; structnode*next; }NODE; NODE*head=NULL; /*函数声明*/ NODE*createlist_head(intlen); ...
  • #include "stdio.h"#define OK 1#define ERROR 0#define TRUE 1#define FALSE 0typedefint Status;/*Status是函数的类型,其值是函数.../*ElemType类型根据实际情况而定,这里假设为int*/typedefstructNode{ElemTy...
  • 最基本的二叉树

    2017-07-05 10:30:00
    来源:http://blog.csdn.net/hopeyouknow/article/details/6740616?reload 一个最基本的二叉树~~ 头文件BiTree.h [cpp]view plaincopy typedefintItem; typedefstructnode { structnod...
  • 单链表

    2017-10-18 10:27:00
    来源:http://blog.csdn.net/hopeyouknow/article/details/6711216 [cpp]view plaincopy #ifndefList_H #defineList_H typedefintItem;/*定义数据项类型*/ typedefstructnode*...
  • //要求用C语言完成课程设计职工信息管理系统—单链表实现#include#include#includeintsaveflag=0;/*是否需要存盘的标志变量*/structemployee{charname[15];charnum[10];/*工号*/charsex[4];...typedefstructnode...
  • 数据结构:栈

    2019-08-13 22:00:33
    1#include<stdio.h>2#include<malloc.h>3#include<stdlib.h>45typedefstructNode6{7intdata;8structNode*pNext;9}NODE,*PNODE;10typedefs...
  • C语言实现单链表

    2019-09-14 22:01:02
    /*本程序实现链表*/ /*编程环境,Linux,gcc编译器*/ /*张泽旺,2015-5-16*/ #include<stdio.h> #include<stdlib.h> //定义结构体 typedefstructNode { intElement; ...
  • /*补全所给程序3,输出所给二叉树的全部结点,求二叉树的高度并输出,并按树状打印该二叉树*/ ...typedefstructNode { DataTypedata; structNode*LChild; structNode*RChild; }BiTNode,*BiTree; voidCrea...
  • 1#include<stdio.h>2#include<malloc.h>3#include<stdlib.h>45typedefstructNode//要理解typedef的用法6{7intdata;8structNode*pNext;9}NODE,*PNOD...
  • 链表的逆置(递归)

    2018-08-11 10:05:33
    #include<stdio.h> #include<stdlib.h> #defineN9 typedefstructnode{ intdata; structnode*next; }ElemSN; ElemSN*Createlink(inta[],intn) {inti; ElemSN*...
  • #include<stdio.h> #include<stdlib.h> #defineN9 typedefstructnode{ intdata; structnode*next; }ElemSN; ElemSN*Createlink(inta[],intn){ inti; ElemSN*h,...
  • #include<stdio.h> #include<stdlib.h> #defineN9 typedefstructnode{ intdata; structnode*next; }ElemSN; ElemSN*Createlink(inta[],intn){//逆向创建单向链表 ...

空空如也

空空如也

1 2 3 4 5 6
收藏数 119
精华内容 47
热门标签
关键字:

typedefstructnode