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

}

这是个很简单的链表创建和输出

#include<stdio.h>

#include<stdlib.h>

typedef struct linkednode

{

char data

struct linkednode *next

}node,*link_list//链表节点的结构及重命名

link_list creat()//创建一个链表返回类型是链表的首地址

{

link_list L

node *p1,*p2

char data

L=(node*)malloc(sizeof(node))//开辟存储空间

p2=L

while((data=getchar())!='\n')//输入回车键时结束输入

{

p1=(node*)malloc(sizeof(node))

p1->data=data

p2->next=p1

p2=p1

}

p2->next=NULL

return L

}

void print(link_list L)//把链表输出

{

node *p

p=L->next

while(p!=NULL)

{

printf("%c",p->data)

p=p->next

}

printf("\n")

}

void main()

{

link_list L=NULL

char x

printf("请输入链表节点:\n")

L=creat()

print(L)

}


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存