C语言关于链表的程序

C语言关于链表的程序,第1张

前阵子做的用州局顷单向链表实现约瑟夫问题:

有M个人围一圈玩报数,凡报到N的出退出,输出每次退出的人的编号。

#include

"stdio.h"

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=2i<=mi++)

{

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

}

#include<stdio.h>

#include<malloc.h>

typedef

struct

stackNode{

int

data

struct

stackNode

*

next

}LinkNode,*

LinkList

//初始化带头节点的单链表

void

InitList(LinkList

*

L)

{

*L

=

(LinkList)malloc(sizeof(LinkNode))

(*L)->next

=

NULL

}

//单链表中插入数值

void

InsertList(LinkList

L)

{

LinkNode

*

Node

LinkNode

*

p

=

L

LinkNode

*pre

Node

=

(LinkNode*)malloc(sizeof(LinkNode))

Node->樱氏next

=

NULL

printf("\n请输入您要插入的数据:")

scanf("%d",&Node->data)

while(

p

!=

NULL

&&

p->data

<=

Node->data)

{

pre

=

p

p

=

p->next

}

Node->next

=

p

pre->next

=

Node

printf("\n插入成功!")

}

//删除单链表元素

void

DelList(LinkList

L)

{

LinkNode

*

p

=

L

LinkNode

*

pre

int

value

printf("\n请输入您要删除的数据:")

scanf("%d",&value)

while(p

!=

NULL

&&

p->data

!=

value)

{

pre

=

p

p

=

p->next

}

if(p

==

NULL)

printf("绝册Did

not

find

%d!\n",value)

else

{

pre->next

=

p->next

free(p)

printf("\n删除成功!")

}

}

//打印单链表

void

Print(LinkList

L)

{

LinkNode

*p

=

L->next

while(p

!=

NULL)

{

printf("%-4d",p->data)

p

=

p->next

}

printf("\n")

}

//菜单

void

menu(LinkList

L)

{

char

ch

do{

system("cls")

printf("----------------菜单---------------\n")

printf("

1.插入一个节点\n")

printf("

2.删除一个节点\n")

printf("

3.打印单链表\n")

printf("

4.推出程序\n\n")

printf("请输入您要进行的 *** 作:")

ch

=

getch()

if(ch

>='1'

&&

ch<'5')

{

printf("%c\脊宏散n",ch)

getch()

switch(ch)

{

case

'1':

InsertList(L)

break

case

'2':

DelList(L)

break

case

'3':

Print(L)

break

case

'4':

return

}

getch()

}

}while(ch

!=

'4')

}

void

main()

{

LinkList

L

InitList(&L)

menu(L)

}

if(i==0)

pf=head=pb//如果i=0即或核输入的为第一个元素,则把它设置为表头

else pf->next=pb//否则芹团弯,用上一个元素的next指针指向它,即入链表的 *** 作

pb->next=NULL//把这个元素的next指针赋值为NULL

pf=pb//把当前元素指针付给下次循嫌闷环用的指针变量

不明白的,就再追问吧!


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/8269882.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存