c语言怎么写链表主函数 c语言 链表操作

用c语言创建链表主函数这里
Linklist List;
printf("输入创建链表的长度:");
scanf("%d",num);
CreateList_H(List,num); //创建链表
改为
LNode List;
printf("输入创建链表的长度:");
scanf("%d",num);
CreateList_H(List,num); //创建链表
函数内在堆上分配好内存,但是 没有传递到栈上
另外 你的变量名很迷人
请问这个链表主函数怎么写?(用C语言,可以从键盘输入n个数实现)哥们你这是数据结构上的吧 。。。。。。学数据结构要灵活 。。。。。
这里给你一个建立链表的程序:(以SDUTOJ2116题为例题)
#include iostream
using namespace std;
class List
{
public:
int data;//数据域,用来记录数据
List *next;//指着域,用来记录它下一个节点的地址
//访问这个变量能找到它的下一个节点
};
void del(List *p)//递归释放内存
{
if(p == NULL)//p为NULL说明p访问到链表结尾了
return ;//访问到结尾返回
del(p-next);//如果没访问到结尾,会在这里一直调用函数本身递归 , 直到遇见NULL
delete p;//遇到NULL返回到head的时候,从后向前删除节点 , 释放内存
//如果从前面删除的话就会把本节点的next值也给删除了,就没办法访问到下一个节点了
//如果定义一个临时变量先记录下一个节点地址然后再删除本节点也是可以解决这个问题的
}
//void del(List *head)
//{
//List *p = head,*q;
//while(p)
//{
//q = p;
//p = p-next;
//delete q;
//}
//}//这样释放内存也是可以的
int main()
{
List *head = new List;//new开辟内存 , 地址赋给head,head代表这个
//链表的头,访问head能找到这个链表
head-next = NULL;//初始状态下只有head链节,他没有后继结点,所以他的next值为NULL(空)
List *p,*q;//p是游动指针,建立链表的时候永远指向最后一个链节
//q是开新内存用的,也就是增加一个新的链节
int n;//输入数的个数
cinn;
p = head;//初始状态下只有head一个链节,那么最后一个链节也是head,让p指向head
for(int i = 0;in;i)
{
q = new List;//增加新的链节q
cinq-data;//给新链节的data赋值
p-next = q;//把q挂在p(初始值是head)的后面
q-next = NULL;//新链节是链表的最后一个链节,后面没有后继,那么 , 就把他的next值设为NULL(空)
p = q;//q成为p的后继之后,q就是最后一个节点,我们规定p指向最后一个节点,这里就把q赋给p
}//循环完成后,链表就建立完了,head是他们的头
p = head-next;//p在上面是指向最后一个元素,以便于增加新的链节后能很快的放在它的后面,达到添加链节的目的
//现在我们就发动他的游动特点,来访问整个链表,从上面看来,我们输入的第一个整数放在q-data
//里面了 , 并没有放在head里面,那么 , 我们访问的话,head的下一个节点才是第一个存储节点,用p
//访问head的next,判就指向了链表中的第一个存储输入数的节点(真正第一个节点是head,因为head
//因为head的data没有值,所以,我们说head的后面第一个节点为有效节点)
while(p != NULL)//当p访问不到NULL的时候,就会一直循环,NULL是链表结束的标志
{
coutp-data;//输出p访问到的每个节点的data值
if(p-next != NULL)
cout" ";//这两行是调格式的,为了能在最后不多输出空格,其实只是为了在OJ上AC
p = p-next;//p访问把本节点的next值,p就指向下一个节点,相当于向后移动一个节点
}
coutendl;
del(head);//释放内存
return 0;
}
关于C语言单向链表,编写一个主函数 , 要求用函数实现如下功能:#includeiostream
using namespace std;
class Node {
public:
int data;
Node* next;
Node(int _data) {
data = https://www.04ip.com/post/_data;
next = NULL;
}
};
class LinkList {
private:
Node* head;
public:
LinkList() {
head = NULL;
}
void insert(Node *node, int index) {
if (head == NULL) {
head = node;
return;
}
if (index == 0) {
node-next = head;
head = node;
return;
}
Node *current_node = head;
int count = 0;
while (current_node-next != NULLcountindex - 1) {
【c语言怎么写链表主函数 c语言 链表操作】current_node = current_node-next;
count;
}
if (count == index - 1) {
node-next = current_node-next;
current_node-next = node;
}
}
void output() {
if (head == NULL) {
return;
}
Node *current_node = head;
while (current_node != NULL) {
coutcurrent_node-data" ";
current_node = current_node-next;
}
coutendl;
}
void delete_node(int index) {
if (head == NULL) {
return;
}
Node *current_node = head;
int count = 0;
if (index == 0) {
head = head-next;
delete current_node;
return;
}
while (current_node-next != NULLcountindex -1) {
current_node = current_node-next;
count;
}
if (count == index - 1current_node-next != NULL) {
Node *delete_node = current_node-next;
current_node-next = delete_node-next;
delete delete_node;
}
}
void reverse(){
if(head == NULL){
return;
}
Node *next_node,*current_node;
current_node = head-next;
head-next = NULL;
while(current_node != NULL){
next_node = current_node-next;
current_node-next = head;
head = current_node;
current_node = next_node;
}
}
};
int main() {
LinkList linklist;
for (int i = 1; i = 10; i) {
Node *node = new Node(i);
linklist.insert(node, i - 1);
}
linklist.output();
linklist.delete_node(3);
linklist.output();
linklist.reverse();
linklist.output();
return 0;
}
关于c语言怎么写链表主函数和c语言 链表操作的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站 。

    推荐阅读