开始学习数据结构,把写过的代码发上来,希望可以给有需要的人一个参考。
//本代码由 大漠孤烟 整理编写,并验证通过
//求解约瑟夫问题,涉及到链表节点的生成,节点的插入和删除,对理解链表非常有好处
//N个节点围城一圈,从第一个节点开始计数(1),每数到第M的数删除,看最后留下那个数
#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
typedef struct LNode
{
int item;
LNode *next;//注意,这里要用自己的类型声明一个指针
}LNode;
//这个声明创建了一个链表节点的结构体,包括数据域个指针域
//LNode是一个结构变量,可以用来计算结构体占用的内存
//声明一个指向链表节点的指针
typedef struct LNode *LinkList;
int main(int argc,char *argv[])//使用参数之后要从dos界面运行并输入参数
{
int N,M;
int i;
N = atoi(argv[1]);
M = atoi(argv[2]);
LinkList Lhead,p,q;//定义三个指向链表结构的指针
//将malloc()的返回值强制转换为LinkList类型,不可少
Lhead = (LinkList)malloc(sizeof(LNode));//为头结点分配空间
if(!Lhead)
return 1;//分配内存空间失败
Lhead->item = 1;
Lhead->next = Lhead;
p = Lhead;
for(i = 2; i <