首页 > 编程知识 正文

顺序表和链表的定义,链表c语言实现

时间:2023-05-03 11:59:24 阅读:175049 作者:3872

//author hernoforgot

//这次简单模拟了堆栈和队列的操作,其中很多都是我在没有返回值的情况下安装的,但是考虑到最优化和特殊情况,可以稍微修改一下

//建议使用笔划绘制操作流程。 有助于理解

//如果有错误或者有什么意见的话,欢迎留言。 thanks!

/*

堆栈和队列(线性结构)可以通过链表或数组来实现

区别:堆栈在一端操作先出来

队列的一端被插入,另一端被删除

1 .堆栈:插入和删除的一端堆栈顶部

剩下的一端不能操作称为堆栈底

功能受限的线形表,与顺序表不同,不能插入中间

进程堆栈、外堆栈和数据检索

作用:用于求某个进制

《若用链表实现,需要销毁链表》

2 .队列:

插入标题以删除数据

或者在队尾插入数据

数组需要判断团队是否已满,是否不需要团队的空闲链表

应用:先到先得

*/

#includestdio.h

# include stdlib.h/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * h/* * * * * * h

typedef struct stack{

int data[20]; //保存数据

int size; //数组大小

int top; //用下标表示堆栈顶部

}堆栈;

//初始化堆栈

voidinit(stack*ST )。

st-top=0;

st-size=20; //指针,不能使用点运算符

}

//进入堆栈,保存数据

voidpushstack(stack*ST,int data )。

if(ST-top=ST-size ) {

printf (堆栈已满,无法进入堆栈);

返回;

}

st-data[st-top]=data;

st-top;

}

//只能从堆栈中删除数据,在堆栈顶部安装得到堆栈元素

intpopstack(stack*ST ) )

if(ST-top=0) {

printf (堆栈为空,无法实现堆栈) );

返回- 1;

}

ST-top----;

return st-data[st-top];

}

int main ()。

堆栈;

init (堆栈;

//输入数据

for(intI=0; i 10; I ) {

推式堆栈(stack,I );

}

可见是先进的后来人

//输出一定个数的数据

for(intI=0; i 10; I ) {

printf(%d(t ),Popstack ) );

}

getchar (;

返回0;

}

/* * * * * * * * * * * *队列* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *队列

//便于编写结构并为其取别名

typedef struct node{

公共:

int data;

struct node *next;

}NODE,*PNODE;

//使用队列头和队列尾

struct list{

PNODE front; //作为团队领导使用

PNODE end; //在队伍的最后使用

(}List; //定义结构变量,注意没有typedef,而不是附加别名

//先初始化队列列表---团队领导和团队尾

void init ()

List.front=NULL;

List.end=NULL;

}

控制队伍,即入团

voidpushlist(intdata ) {

//申请临时节点,推入节点数据

podetemp=(pnode ) malloc (sizeof ) node );

temp-data=data;

//判断队列是否为空

if (list.front==空值) {

//队列为空,使用队列头进行数据输入的队列末尾是指其新插入的节点

List.front=temp;

List.front-data=data;

List.end=temp;

List.end-next=NULL;

}

else{

//插入队列,使队列的末尾指向新插入的节点,而不是空的

List.end-next=temp;

List.end=List.end-next;

List.end-data=data;

List.end-next=NULL;

}

}

//出队

void outList () }

//先判断队列是否为空

if (list.end==空值) {

printf ('队列为空且无法退出堆栈);

}

else {

printf('%d”,List.front-data );

PNODE temp; //在临时节点上指向当前队列头,释放其内存

temp=List.front;

List.front=List.front-next;

free(temp );

//只有一个团队要素表示是特殊情况,需要注意

//如果不将队尾List.end指向天空,就会变成野针

if(list.front==null ) )。

{

free(list.front ); List.end=NULL;

}

}

}

//删除队列类似于堆栈

void deleteList (

outList (;

}

int main ()。

//测试

init (;

int i;

for(I=0; i 10; I )

pushlist(I;

for(I=0; i 10; I )

outList (;

getchar (;

返回0;

}

PS :希望这篇文章能有帮助

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。