链队列

来源:互联网 发布:zoom会议软件注册 编辑:程序博客网 时间:2024/05/22 13:13
/**头结点:如果没有头结点那么插入和删除就会多一种情况要处理。//这里如果没有头结点,当root开始为空,导致新建第一个结点找不到。*/#include<iostream>using namespace std;struct node {int data;node *link;};//声明单链表头结点node *first;/**单链表的查找:查找第k个结点(可包括头结点,为第0个)*/node *find(node *first,int k) {if(!first||k<0) {printf("find msg:error first==NULL||k<=0\n");return NULL;}node *temp=first;int i=0;while(temp&&i<k) {temp=temp->link;i++;}if(temp&&i==k) {printf("find msg:success\n");return temp;}printf("find msg:error find no\n");return NULL;}/**插入到第k个结点位置(k>=1)*/bool insert(node *first,int k,int data) {if(k<1) {printf("insert msg:error k<1\n");return false;}node *node_k=find(first,k-1);if(!node_k) {printf("insert msg:error node_k==NULL\n");return false;}node *newnode=new node();newnode->data=data;node *node_k_next=node_k->link;node_k->link=newnode;newnode->link=node_k_next;printf("insert msg:seccess\n");return true;}/**删除第k个结点*/bool del(node *first,int k) {node *node_temp=find(first,k);if(!node_temp) {printf("del msg:error !node_temp\n");return false;}node *node_k_pre=find(first,k-1);if(!node_k_pre) {printf("del msg:error node_k==NULL\n");return false;}node *node_k=node_k_pre->link;if(!node_k->link) {delete node_k;//注意这里释放了node_k,node_k_pre=NULL,否则成野指针node_k_pre->link=NULL;printf("del msg:success\n");return true;}node *node_k_next=node_k->link;node_k_pre->link=node_k_next;delete node_k;printf("del msg:seccess\n");return true;}/////////////////////////////////////////////////////////////////链队列node *get_rear() {node *temp=first;while(temp->link) {temp=temp->link;}return temp;}bool empty() {if(!first->link)return true;return false;}int front() {if(!empty()) {return first->link->data;}return -1;}void enqueue(int data) {node *n=new node();n->data=data;node *last=get_rear();last->link=n;printf("insert seccess data=%d\n",data);}void dequeue() {del(first,1);}int main() {//保证有头结点first=new node();enqueue(1);enqueue(2);enqueue(3);enqueue(4);enqueue(5);while(!empty()) {printf("data=%d\n",front());dequeue();}return 0;}