C语言 数据结构 队列 链队列

xiaoxiao2021-02-28  105

//C语言--数据结构--队列 链队列 #include <stdio.h> #include <stdlib.h> #include <iostream> #include <malloc.h> #include <windows.h> using namespace std; typedef struct node{     char *data;        //数据存储区     struct node *next; //存放下一节点的地址 }LinkQueue,*Link; typedef struct{     Link   front;   //队头指针     Link   rear;    //队尾指针 }linkqueue; int  init(linkqueue *link); int  append(linkqueue *link,char *data); int  insert(linkqueue *link,int index,char *data); int  modify(linkqueue *link,int index,char *data); int  remove(linkqueue *link,int index); Link  get(linkqueue *link,int index); int  getLength(linkqueue *link); void getAll(linkqueue *link); int  isExist(linkqueue *link); int  isEmpty(linkqueue *link); int  distory(linkqueue *link); //初始化链队列 int init(linkqueue *link){     link->front=link->rear=(LinkQueue *)malloc(sizeof(LinkQueue));//     if (link->front==NULL){         cout<< "初始化链队列失败!!!" <<endl;         return 0;     }     link->front->next=NULL;     return 1; } //在链队列的最后追加元素 int append(linkqueue *link,char *data){     LinkQueue *container=(LinkQueue *)malloc(sizeof(LinkQueue));     if (container==NULL){         printf("数据元素添加失败!!!\n");         return 0;     }     container->data=data;     container->next=0;     link->rear->next=container;     link->rear=container;     return 1; } //在链队列的第index位置插入元素 int insert(linkqueue *link,int index,char *data){     if(index<0 || index>getLength(link)){         printf("索引下标越界!!!\n");         return 0;     }     LinkQueue *container=(LinkQueue *)malloc(sizeof(LinkQueue));     container->data=data;     LinkQueue *first=link->front->next;     for (int i=0;i<index;i++){         first=first->next;     }     container->next=first->next;     first->next=container;     return 1; } //更改链队列的第index位置的元素 int modify(linkqueue *link,int index,char *data){     if (index<0||index>getLength(link)){         printf("索引下标越界!!!\n");         return 0;     }     LinkQueue *modify=link->front->next;     for (int i=0;i<index;i++){         modify=modify->next;     }     modify->data=data;     return 1; } //移除链队列的第index位置的元素 int remove(linkqueue *link,int index){     if (index<0||index>getLength(link)){         printf("索引下标越界!!!\n");         return 0;     }     if (index==getLength(link)){         LinkQueue *last=link->front;         for (int i=0;i<index-1;i++){             last=last->next;         }         last->next=NULL;         return 1;     }     LinkQueue *move=link->front;     for (int i=0;i<index;i++){         move=move->next;     }     move->next=move->next->next;     return 1; } //获取链队列的第index位置的元素 Link get(linkqueue *link,int index){     if (index<0||index>getLength(link)){         printf("索引下标越界!!!\n");         return NULL;     }     LinkQueue *get=link->front->next;     for (int i=0;i<index;i++){         get=get->next;     }     return get; } //获取链队列的有效长度 int getLength(linkqueue *link){     LinkQueue *len=link->front->next;     int length=0;     while(len){         length++;         len=len->next;     }     return length; } //输出链队列的全部元素 void getAll(linkqueue *link){     LinkQueue *show=link->front->next;     while(show){         printf("%s\n",show->data);         show=show->next;     } } //判断链队列是否存在 int isExist(linkqueue *link){     if (link->front==NULL || link->rear==NULL){         cout<<"链队列未初始化!!!"<<endl;         return 0;     }else{         return 1;     } } //判断链队列是否为空 int isEmpty(linkqueue *link){     if (isExist(link)){         if(link->front==link->rear){             return 1;         }else{             return 0;         }     }     return 0; } //销毁链队列 int distory(linkqueue *link){     free(link);     return 1; } void main(){     linkqueue link;     init(&link);     append(&link,"a");     append(&link,"b");     append(&link,"c");     append(&link,"d");     append(&link,"e");     //modify(&link,4,"H");     int k=4;     cout<<"获取的第 "<<k<<" 个元素为 "<<get(&link,k)->data<<endl;     //remove(&link,5);     insert(&link,2,"X");     getAll(&link);     cout<<"链队列长度 "<<getLength(&link)<<endl;     system("pause"); }
转载请注明原文地址: https://www.6miu.com/read-57248.html

最新回复(0)