#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)
}
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)