关于线性表的定义,在网上很容易找到或者应该都清楚。因此本篇目只给出一个示列程序。希望能够帮到有需要的人。
#include<stdio.h>
#include<stdlib.h>
//对链表结点结构进行定义
typedef int DATA; //定义结点数据类型为整型
struct LINK_LIST //定义链表结点格式
{
DATA data; //数据域
LINK_LIST* next; //后继指针域
};
typedef struct LINK_LIST ELEMENT;
typedef ELEMENT *LINK;
//链表的初始化
LINK init_list()
{
LINK head; //创建头结点
head = (LINK)malloc(sizeof(ELEMENT)); //给头结点分配内存
head ->next=NULL; //悬空后继指针域
return head; //返回头结点
}
//链表长度计算
int count_list(LINK head) //传入头指针
{
int cnt=0; //设置在第一个结点时cnt为0
head = head->next; //将指针指向后继元素
while(head!=NULL) //检测head是否为空指针,若是则证明已经遍历到了最后一个元素,同时跳出循环。
{
cnt++;
head = head->next; //不断将下一个节点的后继指针迭代给head
}
return cnt;
}
//链表插值(在给定结点之前)
void insert_list(LINK head, int i,DATA data)
{
LINK p;
int j=0;
while(head!=NULL&&j<i-1) //寻找第i-1个结点
{
head = head->next;
j++;
}
if(head==NULL||j>i-1)
printf("insert error!!!");
else //将目标元素插入到第i-1个元素之后
{
p = (LINK)malloc(sizeof(ELEMENT));
p->data = data;
p->next = head->next;
head->next = p;
}
}
//访问链表元素的值
DATA *get_list(LINK head,int i)
{
int j=1;
head = head->next;
while(head!=NULL&&j<i)
{
head = head->next;
j++;
}
if(head!=NULL&&j==i)
return &head->data;
else return NULL;
}
int main()
{
ELEMENT *p = init_list(); //初始化一个空链表
insert_list(p, 1,12); //将链表第一个结点设置为12
insert_list(p, 2,13); //将链表第二个结点设置为12
insert_list(p, 2,555); //将链表第二个结点插入数据555,原来的13向后移位变成第三个结点
printf("%d",*get_list(p,2)); //输出第二个结点的数据
}
其实是我肚子很饿,要去吃饭了😂。。。。。
这篇博客提供了C语言实现链表的完整示例,旨在帮助需要理解链表操作的读者。虽然作者幽默地提到自己要吃饭,但示例程序涵盖了线性表的基本概念和操作。
2704

被折叠的 条评论
为什么被折叠?



