//链表的一些简单操作
#include <stdio.h>
#include <malloc.h>
struct List {
int data; //数据
struct List *next; //指向下一个结点
};
//建立n个结点的后进先出单向链表
struct List * createList(int n);
//链表的遍历
void showList(struct List * head);
//在链尾加一个结点
void insertList(struct List * head,int data);
//删除链的一个结点
int deleteList(struct List * head,int data);
//释放链表
void freeList(struct List * head);
int main(void)
{
//建立链表
struct List *head=createList(9);
showList(head); //遍历链表
insertList(head,0); //在链尾加一个结点
deleteList(head,4); //删除链的一个结点
freeList(head); //释放链表
return 0;
}
//功 能:建立n个结点的后进先出单向链表
//入口参数:项数n
//返 回 值:指向链表哨兵结点的指针
struct List * createList(int n)
{
struct List *head,*node;
head=(struct List *)malloc(sizeof(struct List));
//头结点(哨兵)的数据域为空!
head->next=NULL;
for (int i=0;i<n;i++) {
node=(struct List *)malloc(sizeof(struct List));
node->data=i+1;
node->next=head->next;
head->next=node;
}
return head;
}
//功 能:链表的遍历
//入口参数:head指向链表哨兵结点的指针
void showList(struct List * head)
{
struct List *h;
h=(struct List*)malloc(sizeof(struct List));
h=head->next;
while(h!=NULL){
printf("%d ",h->data);
h=h->next;
}
}
//功 能:在链尾加一个结点
//入口参数:head指向链表哨兵结点的指针
// data待插入结点的数据值
void insertList(struct List * head,int data)
{
struct List *p,*newNode;
newNode=(struct List*)malloc(sizeof(struct List));
newNode->data=data;
for(p=head;p->next!=NULL;p=p->next); // 链表遍历惯用
p->next=newNode;
newNode->next=NULL;
}
//功 能:删除链的一个结点
//入口参数:head指向链表哨兵结点的指针
// data待删除结点的数据值
//返 回 值:1成功删除,0结点不存在
int deleteList(struct List * head,int data)
{
struct List *pre,*p;
for(p=head->next;p->data!=data&&p->next!=NULL;p=p->next)
pre=p;
if(p->data!=data)return 0;
else{
pre->next=p->next;
}
return 1;
}
//功 能:释放链表
//入口参数:head指向链表哨兵结点的指针
void freeList(struct List * head)
{
struct List *temp;
for(struct List *p=head;p!=NULL;p=temp){
temp=p->next;
free(p);
}
}
0.0分
0 人评分
C语言网提供由在职研发工程师或ACM蓝桥杯竞赛优秀选手录制的视频教程,并配有习题和答疑,点击了解:
一点编程也不会写的:零基础C语言学练课程
解决困扰你多年的C语言疑难杂症特性的C语言进阶课程
从零到写出一个爬虫的Python编程课程
只会语法写不出代码?手把手带你写100个编程真题的编程百练课程
信息学奥赛或C++选手的 必学C++课程
蓝桥杯ACM、信息学奥赛的必学课程:算法竞赛课入门课程
手把手讲解近五年真题的蓝桥杯辅导课程
发表评论 取消回复