C语言 数据结构 队列 链队列
来源:互联网 发布:程序员群头像 编辑:程序博客网 时间:2024/06/05 15:05
//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");
}
阅读全文
0 0
- C语言 数据结构 队列 链队列
- C语言数据结构-链队列
- C语言实现数据结构中的链队列
- 数据结构C语言实现之链队列
- C语言数据结构中链队列细节
- C语言实现数据结构链队列
- C语言数据结构之-队列
- C语言数据结构之队列
- 数据结构.队列(C语言实现)
- C语言数据结构-顺序队列
- 数据结构_4:队列:C语言
- 数据结构---队列C语言实现
- 复习(数据结构):队列:c语言
- 8.1 C语言队列-----数据结构
- 循环队列 C语言数据结构
- C语言:链队列
- c语言:链队列
- c语言数据结构实现-数组队列/环形队列
- node
- python中从str中提取元素到list以及将list转换为str
- reduce&compose&applyMiddleware&redux-thunk
- EventBus 使用心得
- (个人)AR电子书创新系统实训第五周(1)
- C语言 数据结构 队列 链队列
- 事件环
- JS事件流与事件处理程序
- 子查询
- Android中View类OnClickListener和DialogInterface类OnClickListener冲突解决办法
- Linux之死锁
- Cookie会话管理
- ACM做题过程中的小技巧
- Maven依赖的Scope去除部署不需要的jar 包(打包)