
#include
"stdio.h"
struct
Node
{
Node
*pNext
int
value
}*pTop
struct
Node*
Insert(struct
Node
*pNode,int
Num)
void
Del(struct
Node
*pDelNode)
struct
Node*
Search(struct
Node
*pNode,int
Num)
void
main()
{
pTop=NULL
int
i,k,x,y
struct
Node
*pCurrentNode,*pTempNode
/*(1)建立带表头结点的单链表;*/
for(i=0i<30i++)
Insert(NULL,i)/*建立一个有30个结点的链表*/
/*(2)输出单链表中所有结点的数据域值;*/
pCurrentNode=pTop
while(pCurrentNode!=NULL)
{
printf("%d->",pCurrentNode->value)/*遍历这个链表并输出其各结点的数据域*/
pCurrentNode=pCurrentNode->pNext
}
/*(3)输入x,y在第一个数据域值为x的结点之后插入结点y,若无结点x,则在表尾插入结点y*/
printf("Input
x,y")
scanf("%d,%d",&x,&y)
pCurrentNode=Search(NULL,x)
Insert(pCurrentNode,y)
/*(4)输入k,删除单链表中所有的结点k,并输出被删除结点的个数。
*/
printf("Input
k")
scanf("%d",&k)
pCurrentNode=pTop
i=0
while(1)
{
pTempNode=Search(pCurrentNode,x)
if(pTempNode!=NULL)
{
pCurrentNode=pTempNode->pNext
Del(pTempNode)
i++
}
else
break
}
printf("%d
Nodes
was
deleted",i)
pTempNode=pTop
while(pTop!=NULL)
{
pTop=pTempNode->pNext
delete
pTempNode
}
}
Node*
Insert(struct
Node
*pNode,int
Num)
{
struct
Node
*pNewNode
pNewNode=new
Node
pNewNode->value=Num
if(pNode==NULL)/*无确定插入位置时将结点放在链表最后*/
{
if(pTop!=NULL)/*确定链表是否是空表*/
{
pNode=pTop
while(pNode->pNext!=NULL)
pNode=pNode->pNext/*找到尾结点*/
pNode->pNext=pNewNode
}
else
{
pTop=pNewNode
}
pNewNode->pNext=NULL
}
else/*有确定插入位置时将结点放在指定结点之后*/
{
pNewNode->pNext=pNode->pNext
pNode->pNext=pNewNode
}
return
pNewNode
}
void
Del(struct
Node
*pDelNode)
{
if(pDelNode==NULL
||
pTop==NULL)
return/*防错处理*/
struct
Node
*pNode
pNode=pTop
while(pNode!=NULL
&&
pNode->pNext!=pDelNode)
pNode=pNode->pNext/*找到指定结点的前导结点*/
if(pNode!=NULL)
{
pNode->pNext=pDelNode->pNext
delete
pDelNode
}
}
struct
Node*
Search(struct
Node
*pNode,int
Num)
{
struct
Node
*pSeaNode
if(pNode==NULL)
pSeaNode=pTop/*不指定搜索的起始位置,从表头开始*/
else
pSeaNode=pNode/*指定了搜索的起始位置,从指定位置开始*/
while(pSeaNode!=NULL
&&
pSeaNode->value!=Num)
pSeaNode=pSeaNode->pNext
return
pSeaNode/*没有找到结点时返回空指针*/
}
没有直接根据第几个元素来插入的函数,不过可以这样来插入第n个元素list<int>::iterator
j
=
a.begin()
for(i
=
0
i
<
n
&&
j!=
a.end()
++i)
++j
a.insert(j,5,100)
读任意一个元素也可以用同样方法
headinsertdel.CPP创建时间:2008年9月26日(星期五) 晚上9:49 | 分类:未分类 | 字数:1357 | 发送到我的Qzone | 另存为...
#include<stdio.h>
#include<malloc.h>
#include<string.h>
#define NULL 0
typedef struct JD
{ char data
struct JD * next
} JD
JD * creatlist()
{ char chJD * head,* rear,* s
head=(JD*)malloc(sizeof(JD))
rear=head
ch=getchar()
while(ch!='#')
{ s=(JD*)malloc(sizeof(JD))
s->data=chrear->next=s
rear=sch=getchar()
} rear->next=NULL
return head
}
JD * insertbefore(JD * head,JD * p,char x)
{ JD * q,* s
s=(JD*)malloc(sizeof(JD))
s->data=xq=head
while(q->next!=p) {q=q->next}
s->next=pq->next=sreturn head
}
JD * get(JD * head,int i)
{JD * pint j=1
p=head
while(p!=NULL&&j!=i)
{p=p->nextj++}
if(i==j) return p
}
JD * insert(JD * head, char x,int i)
{ JD * p
p=get(head,i)
if(p!=NULL) head=insertbefore(head,p,x)
else printf("error!\n") return head
}
JD * del(JD * head,int j)
{ JD * p
p=get(head,j )
if(p->next->next!=NULL)
{ p->next= p->next->next
}
else p->next=NULLreturn head
}
void show(JD * head)
{printf("输出链表:\n")
if(head!=NULL)
do {
printf("%c\n",* head )head=head->next
} while(head!=NULL)
}
void main()
{ int i,j,k char x,y
JD * head=creatlist()JD * p
int s
printf("which're you want to do:\n 1:insert node. \n 2:delete node.\n 3:get node.\n")
printf("enter your choose num:")
scanf("%d",&s)
switch(s)
{ case 1: printf("插入结点:")
scanf("%d,%c",&i,&x)
head=insert(head,x,i)
show(head)break
case 2: printf("删除结点:")
scanf("%d,%c",&j,&y)
head=del(head,j)
show(head)break
case 3: printf("查找结点:")
scanf("%d",&k)
p=get(head,k)
printf("输出结点:%c\n",* p)break
default:printf("error")
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)