线性表:零个或多个元素组成的有序序列。
链表:单链表,双链表,带头结点,不带头节点,循环,非循环。
双向链表
#include<stdio.h>
#include<stdlib.h>
#define SIZE 20
typedef struct node{
int a;
struct node *prior;
struct node *rear;
}Node;
int node_add(Node **head,int a){
Node *p=(Node *)malloc(sizeof(Node));
p->rear=NULL;
p->a=a;
p->prior=*head;
(*head)->rear=p;
(*head)=p;
return ;
}
int node_print(Node *head){
Node *p=head->rear;
for(;p!=head;p=p->rear){
printf("%d ",p->a);
}
}
int node_print2(Node *rear,Node *head){
for(;rear!=head;rear=rear->prior){
printf("%d ",rear->a);
}
}
void insert(Node *head,int i,int a){
while(i--!=1&&head){
head=head->rear;
}
if(!head){
printf("不够长\n");
return ;
}
Node *p=(Node *)malloc(sizeof(Node));
p->a=a;//忘了
p->rear=head->rear;
p->prior=head;
head->rear->prior=p;
head->rear=p;
}
void node_free(Node *head){
Node *p=head->rear;
Node *q=NULL;
int cnt=0;
for(;p!=head;p=q){
q=p->rear;
free(p);
cnt++;
}
printf("\ncnt = %d \n",cnt);
}
int main()
{
Node *A=(Node *)malloc(sizeof(Node));
Node *head=A;
A->rear=NULL;
A->prior=NULL;
int a;
while(~scanf("%d",&a)){
node_add(&A,a);
}
A->rear=head;
head->prior=A;
node_print(head);
printf("\n");
node_print2(A,head);
printf("输入插入的位置和元素\n");
int i;
scanf("%d %d",&i,&a);
insert(head,i,a);//head和a分不清
node_print(head);
printf("\n");
node_print2(A,head);
node_free(head);
}
顺序队列(循环队列)
#include<stdio.h>
#include<stdlib.h>
#define SIZE 10
typedef struct node{
int a[SIZE];
int top;
int rear;
}Queue;
int EnQ(Queue *Q,int a){
if((Q->rear+1)%SIZE==Q->top){
printf("队列满\n");
return ;
}
Q->a[Q->rear]=a;
Q->rear=(Q->rear+1)%SIZE;
return ;
}
int DeQ(Queue *Q,int *a){
if(Q->rear==Q->top){
printf("\n空\n");
return -1;
}
*a=Q->a[Q->top];
Q->top=(Q->top+1)%SIZE;
return 1;
}
int length(Queue *Q){
return (SIZE-Q->top+Q->rear)%SIZE;
}
int main(){
Queue A;
A.rear=0;
A.top=0;
int a;
int ret,k=0;
char ch;
while(1){
printf("输入D/E");
fflush(stdin);
ch=getchar();
if(ch=='e'){
printf("输入元素\n");
scanf("%d",&a); EnQ(&A,a);
}else if(ch=='d'){
k=DeQ(&A,&ret);
if(k!=-1)
printf("(%d)",ret);
if(k==-1){
printf("\nkong\n");
break;
}
}else if(ch=='c'){
printf("\n长度(%d)\n",length(&A));
}
}
// while((k=DeQ(&A,&ret))!=-1) printf("%d ",ret);
}