C语言 数据结构 队列 链队列
2017-06-07 19:39
120 查看
//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");
}
#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");
}
相关文章推荐
- 数据结构中栈与队列的c语言代码实现
- c语言数据结构——简单队列
- 数制转换器(c语言编写,应用数据结构的栈和队列)
- 手工数据结构系列-C语言模拟队列和栈 hdu1702
- C语言实现数据结构之队列
- 数据结构:循环队列(C语言实现)
- C语言数据结构-顺序队列
- 数据结构:队列(C语言实现)
- 数据结构C语言实现系列——队列
- C语言 数据结构 栈和队列 顺序栈(栈的顺序存储结构)
- 数据结构循环队列斐波拉契数列的实现(c语言)
- 数据结构C语言实现系列——队列
- 数据结构:循环队列(C语言实现)
- 数据结构:循环队列(C语言实现)
- 数据结构:循环队列(C语言实现)
- C语言数据结构——队列
- C语言数据结构之栈与队列的应用(1)进制转换
- 数据结构.队列(C语言实现)
- 数据结构(四)——队列(C语言实现)
- (C语言队列的顺序实现(数据结构十)