下面是正确的代码和运行结果,希望对你有所帮助:)
代码:
#include <stdioh>
#include <stdlibh>
typedef struct Node
{
int data;
struct Node next;
} Node, LinkList;
void create(LinkList head)
{
LinkList h = head;
Node n;
head = (LinkList)malloc(sizeof(Node));
(head)->data = -1;
(head)->next = NULL;
int d;
scanf("%d", &d);
while (d != -1)
{
n = (Node )malloc(sizeof(Node));
n->data = d;
n->next = head;
head = n;
scanf("%d", &d);
}
}
void Print(LinkList head)
{
Node p = head;
if (p == NULL || p->next == NULL)
return;
do
{
printf("%d\n", p->data);
p = p->next;
} while (p->next != NULL);
}
int main(void)
{
LinkList head = NULL;
create(&head);
Print(head);
return 0;
}
运行结果:
10 20 30 40 50 60 70 -1
70
60
50
40
30
20
10
#include<stdlibh>
#include "nodedefh"
#define CreateLinklistWay 1 // 0表示头插法创建链表,1表示尾插法创建链表
#if !CreateLinklistWay
/
函数名称:linklist CreateLinklistHead()
函数功能:利用头插法创建链表
参 数:无
说 明:无
/
extern linklist CreateLinklistHead()
{
int x, i, nodeNum;
linklist head, temp; // 头结点与临时结点
head = (linklist )malloc(sizeof(linklist)); // 生成表头结点
head->next = NULL; // 给表头结点的指针域赋值
printf("请输入链表中结点的个数:");
scanf("%d", &nodeNum);
for(i=1; i<=nodeNum; i++)
{
printf("请输入第 %d 个结点的数据:", i);
scanf("%d", &x);
temp = (linklist )malloc(sizeof(linklist)); // 生成新的结点
temp->data = x; // 对新结点的数据域赋值
// 将新结点插到头结点之后
temp->next = head->next;
head->next = temp;
}
return head; // 返回新建链表的头结点
}
#else
/
函数名称:linklist CreateLinklistRear()
函数功能:利用尾插法创建链表
参 数:无
返 回 值:创建完链表后的链表头结点
说 明:无
/
extern linklist CreateLinklistRear()
{
int x, i, nodeNum;
linklist head, rear, temp; // 定义头结点、尾结点和临时结点
head = (linklist )malloc(sizeof(linklist)); // 生成表头结点,表头结点不存放数据
head->next = NULL; // 将表头结点的指针域赋值为NULL
rear = head; // 将表头结点赋值给表尾结点
printf("请输入链表中结点的个数:");
scanf("%d", &nodeNum);
for(i=1; i<=nodeNum; i++)
{
printf("请输入第 %d 个结点的数据:", i);
scanf("%d", &x);
temp = (linklist )malloc(sizeof(linklist)); // 生成新的结点
temp->data = x; // 新增结点的数据域
temp->next = NULL; // 新增结点的指针域(由于是尾插法,所以插入的结点都在尾部,即指针域为NULL)
rear->next = temp; // 使前一个结点指向新增结点(head->next=temp)
rear = temp; // 将新增结点赋值给尾结点(尾插法,插入的结点在尾部)(rear=head->next)
}
//rear->next = NULL; // 将尾结点的指针域赋值为空(为了方便检验链表是否为空链表)
return head; // 返回头结点
}
#endif
前阵子做的用单向链表实现约瑟夫问题:
有M个人围一圈玩报数,凡报到N的出退出,输出每次退出的人的编号。
#include
"stdioh"
struct
game
{
int
ID;
game
pNext;
};
void
main()
{
int
i,m=17,n=3;
game
pPrev,pNode,pTop;
printf("Input
M
N:");
scanf("%d
%d",&m,&n);
if(n>m||n<1)
return;
pTop=new
game;
pTop->ID=1;
pPrev=pTop;
for(i=2;i<=m;i++)
{
pNode=new
game;
pNode->ID=i;
pPrev->pNext=pNode;
pPrev=pNode;
}
pNode->pNext=pTop;
pPrev=pNode;
pNode=pTop;
i=0;
while(pNode->pNext!=pNode)
{
i++;
if(i%n==0)
{
printf("%d
",pNode->ID);
pPrev->pNext=pNode->pNext;
delete
pNode;
pNode=pPrev->pNext;
i=0;
}
else
{
pPrev=pNode;
pNode=pNode->pNext;
}
}
delete
pNode;
}
以上就是关于有关链表。。。。C程序。。VC调试全部的内容,包括:有关链表。。。。C程序。。VC调试、求一份实现单链表的基本 *** 作的c语言程序,包括输入元素,谢谢。、C语言关于链表的程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)