c语言链表程序设计

c语言链表程序设计,第1张

#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)

}

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

有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

}


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

原文地址: https://outofmemory.cn/yw/11593117.html

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

发表评论

登录后才能评论

评论列表(0条)

保存