双向链表:
#include <stdio.h>
#include "./3_list.h"
int main(int argc, const char *argv[])
{
Dublinklist* head = create_doublelinklist();
insertByRear_doublelinklist(head, 14);
insertByRear_doublelinklist(head, 23);
insertByRear_doublelinklist(head, 567);
show_doublelinklist(head);
insertByPos_doublelinklist(head, 123, 4);
show_doublelinklist(head);
insertByPos_doublelinklist(head, 124, 3);
show_doublelinklist(head);
insertByPos_doublelinklist(head, 564, 1);
show_doublelinklist(head);
printf("%d\n", deleteByPos_doublelinklist(head, 5));
show_doublelinklist(head);
printf("%d\n", deleteByPos_doublelinklist(head, 4));
show_doublelinklist(head);
printf("%d\n", deleteByPos_doublelinklist(head, 1));
show_doublelinklist(head);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include"./3_list.h"
Dublinklist* create_doublelinklist()
{
Dublinklist* head = (Dublinklist*)malloc(sizeof(Dublinklist));
if(NULL == head)
{
printf("双向链表创建失败\n");
return NULL;
}
head->msg.len = 0;
head->next = NULL;
head->prev = NULL;
return head;
}
void insertByFront_doublelinklist(Dublinklist* head,datatype num)
{
Dublinklist* temp = (Dublinklist*)malloc(sizeof(Dublinklist));
if(NULL == temp)
{
printf("结点创建失败\n");
return;
}
temp->msg.data = num;
temp->next = NULL;
temp->prev = NULL;
temp->next = head->next;
head->next = temp;
if(head->next->next ==NULL)
{
temp->prev = head;
}
else
{
temp->prev = temp->next->prev;
temp->next->prev = temp;
}
head->msg.len++;
}
void insertByRear_doublelinklist(Dublinklist* head,datatype num)
{
Dublinklist* temp = (Dublinklist*)malloc(sizeof(Dublinklist));
if(NULL == temp)
{
printf("结点创建失败\n");
return;
}
temp->msg.data = num;
temp->next = NULL;
temp->prev = NULL;
Dublinklist* p = head;
while(p->next !=NULL)
{
p =p->next;
}
temp->next = p->next;
p->next = temp;
temp->prev = p;
head->msg.len++;
}
void insertByPos_doublelinklist(Dublinklist* head,datatype num,int pos)
{
if(pos<=0 || pos>head->msg.len+1)
{
printf("插入位置不合法\n");
return;
}
Dublinklist* p =head;
for(int i=0;i<pos-1;i++)
{
p=p->next;
if(NULL == p)
{
printf("插入位置非法\n");
return;
}
}
Dublinklist* temp = (Dublinklist*)malloc(sizeof(Dublinklist));
if(NULL == temp)
{
printf("结点创建失败\n");
return;
}
temp->msg.data = num;
temp->next = NULL;
temp->prev = NULL;
temp->next = p->next;
p->next = temp;
temp->prev =p;
if(temp->next != NULL)
{
temp->next->prev = temp;
}
head->msg.len++;
return;
}
datatype deleteByFront_doublelinklist(Dublinklist* head)
{
if(NULL == head || NULL == head->next)
{
printf("双向链表为空\n");
return (datatype)-1;
}
Dublinklist* temp = head->next;
head->next =temp->next;
temp->prev = head;
if(temp->next != NULL)
{
temp->next->prev = temp;
}
datatype num = temp->msg.data;
free(temp);
head->msg.len--;
return num;
}
datatype deleteByRear_doublelinklist(Dublinklist* head)
{
if(NULL == head || NULL == head->next)
{
printf("双向链表为空\n");
return (datatype)-1;
}
Dublinklist* temp = head->next;
while(temp->next !=NULL)
{
temp = temp->next;
}
temp->prev->next = temp->next;
datatype num = temp->msg.data;
free(temp);
head->msg.len--;
return num;
}
datatype deleteByPos_doublelinklist(Dublinklist* head,int pos)
{
if(NULL == head || NULL == head->next)
{
printf("双向链表为空\n");
return (datatype)-1;
}
if(pos<=0 || pos>head->msg.len+1)
{
printf("插入位置不合法\n");
return (datatype)-1;
}
Dublinklist* p =head;
for(int i=0;i<pos;i++)
{
p=p->next;
if(NULL == p)
{
printf("插入位置非法\n");
return (datatype)-1;
}
}
p->prev->next = p->next;
if(p->next !=NULL)
{
p->next->prev = p->prev;
}
datatype num = p->msg.data;
free(p);
head->msg.len--;
return num;
}
void show_doublelinklist(Dublinklist* head)
{
Dublinklist* p = head;
while(p->next != NULL)
{
p = p->next;
printf("%d ",p->msg.data);
}
putchar(10);
return;
}
#ifndef __DOUBLE_LINKLIST_H__
#define __DOUBLE_LINKLIST_H__
typedef int datatype;
typedef struct dublnklst
{
union
{
int len;
datatype data;
}msg;
struct dublnklst* next;
struct dublnklst* prev;
}Dublinklist;
Dublinklist* create_doublelinklist();
void insertByFront_doublelinklist(Dublinklist* head, datatype num);
void insertByRear_doublelinklist(Dublinklist* head, datatype num);
void show_doublelinklist(Dublinklist* head);
datatype deleteByFront_doublelinklist(Dublinklist* head);
datatype deleteByRear_doublelinklist(Dublinklist* head);
void insertByPos_doublelinklist(Dublinklist* head, datatype num, int pos);
datatype deleteByPos_doublelinklist(Dublinklist* head, int pos);
#endif
顺序栈:
#include <stdio.h>
#include "./3_stack.h"
int main()
{
stack* st = create_stack();
insert_stack(st,3);
insert_stack(st,7);
show_stack(st);
datatype x = delete_stack(st);
printf("%d\n",x);
show_stack(st);
free_stack(&st);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include "./3_stack.h"
stack* create_stack(void)
{
stack* st = (stack*)malloc(sizeof(stack));
if(NULL == st)
{
printf("顺序栈创建失败\n");
return NULL;
}
st->pos=0;
return st;
}
int insert_stack(stack* st,datatype num)
{
if(st->pos >= N)
{
printf("顺序栈已满\n");
return -1;
}
st->data[st->pos] = num;
st->pos++;
return 0;
}
datatype delete_stack(stack* st)
{
if(0 == st->pos)
{
printf("顺序栈为空\n");
return (datatype)-1;
}
st->pos--;
datatype num = st->data[st->pos];
return num;
}
void show_stack(stack* st)
{
for(int i=0;i<st->pos;i++)
{
printf("%d ",st->data[i]);
}
putchar(10);
return;
}
void free_stack(stack** st)
{
free(*st);
*st = NULL;
printf("顺序栈已删除\n");
}
#ifndef __STACK_H__
#define __STACK_H__
#define N 7
typedef int datatype;
typedef struct
{
datatype data[N];
int pos;
}stack;
stack* create_stack(void);
int insert_stack(stack* st,datatype num);
datatype delete_stack(stack* st);
void show_stack(stack* st);
void free_stack(stack** st);
#endif
顺序队列
#include <stdio.h>
#include "./3_queue.h"
int main()
{
queue* sq = create_queue();
insert_queue(sq,12);
insert_queue(sq,313);
insert_queue(sq,34);
insert_queue(sq,234);
insert_queue(sq,68);
insert_queue(sq,5);
insert_queue(sq,91);
insert_queue(sq,4);
insert_queue(sq,7);
show_queue(sq);
datatype x = delete_queue(sq);
printf("%d\n",x);
datatype x1 = delete_queue(sq);
printf("%d\n",x1);
datatype x2 = delete_queue(sq);
printf("%d\n",x2);
datatype x3 = delete_queue(sq);
printf("%d\n",x3);
show_queue(sq);
printf("%d\n",count_num(sq));
free_queue(&sq);
return 0;
}
#include <stdio.h>
#include <stdlib.h>
#include "./3_queue.h"
queue* create_queue(void)
{
queue* sq = (queue*)malloc(sizeof(queue));
if(NULL == sq)
{
printf("顺序队列创建失败\n");
return NULL;
}
sq->front,sq->rear = 0;
return sq;
}
int insert_queue(queue* sq,datatype num)
{
if((sq->rear+1)%N ==sq->front)
{
printf("顺序队列已满\n");
return -1;
}
sq->data[sq->rear] = num;
sq->rear = (sq->rear+1)%N;
return 0;
}
datatype delete_queue(queue* sq)
{
if(sq->rear == sq->front)
{
printf("顺序队列为空\n");
return (datatype)-1;
}
datatype num = sq->data[sq->front];
sq->front = (sq->front+1)%N;
return num;
}
int count_num(queue* sq)
{
return (sq->rear-sq->front+N)%N;
}
void show_queue(queue* sq)
{
for(int i=sq->front;i !=sq->rear;i++)
{
printf("%d ",sq->data[i]);
}
putchar(10);
return;
}
void free_queue(queue** sq)
{
free(*sq);
*sq = NULL;
printf("顺序队列已删除\n");
}
#ifndef __QUEUE_H__
#define __QUEUE_H__
#define N 30
typedef int datatype;
typedef struct
{
datatype data[N];
int front;
int rear;
}queue;
queue* create_queue(void);
int insert_queue(queue* sq,datatype num);
datatype delete_queue(queue* sq);
void show_queue(queue* sq);
void free_queue(queue** sq);
int count_num(queue* sq);
#endif
链式队列
#include<stdio.h>
#include"./3_linkqueue.h"
int main()
{
op* lq = create_linkqueue();
input_linkqueue(lq,1);
input_linkqueue(lq,235);
input_linkqueue(lq,78);
input_linkqueue(lq,47);
show_linkqueue(lq);
printf("%d\n",output_linkqueue(lq));
printf("%d\n",output_linkqueue(lq));
printf("%d\n",output_linkqueue(lq));
show_linkqueue(lq);
return 0;
}
#include<stdio.h>
#include<stdlib.h>
#include"./3_linkqueue.h"
op* create_linkqueue()
{
op* fr = (op*)malloc(sizeof(op));
fr->front = (linkqueue*)malloc(sizeof(linkqueue));
if(NULL == fr->front)
{
printf("创建队列失败\n");
return (op*)-1;
}
fr->front->msg.len = 0;
fr->front->next = NULL;
fr->rear = fr->front;
return fr;
}
void input_linkqueue(op* fr,datatype num)
{
linkqueue* temp = (linkqueue*)malloc(sizeof(linkqueue));
if(NULL == temp)
{
printf("创建结点失败\n");
return;
}
temp->msg.data = num;
temp->next = NULL;
temp->next = fr->rear->next;
fr->rear->next = temp;
fr->rear = fr->rear->next;
fr->front->msg.len++;
}
datatype output_linkqueue(op* fr)
{
if(fr->rear == fr->front)
{
printf("队列为空\n");
return(datatype)-1;
}
linkqueue* temp = fr->front->next;
fr->front->next = fr->front->next->next;
datatype num = temp->msg.data;
free(temp);
if(fr->front->next == NULL)
{
fr->rear = fr->front;
}
fr->front->msg.len--;
return num;
}
void show_linkqueue(op* fr)
{
linkqueue* p = fr->front;
while(p != fr->rear)
{
p = p->next;
printf("%d ",p->msg.data);
}
putchar(10);
return;
}
#ifndef __LINKQUEUE_H__
#define __LINKQUEUE_H__
typedef int datatype;
typedef struct lque
{
union
{
int len;
datatype data;
}msg;
struct lque* next;
}linkqueue;
typedef struct
{
linkqueue* front;
linkqueue* rear;
}op;
op* create_linkqueue();
void input_linkqueue(op* fr,datatype num);
datatype output_linkqueue(op* fr);
void show_linkqueue(op* fr);
#endif