데이터 구조 순환 링크 기본 조작 인 스 턴 스 데모
5225 단어 C 언어 잡문
#include
#include //
/* */
typedef struct CLinkList
{
int data;
struct CLinkList *next;
} node;
/*****************************************/
/* */
/*****************************************/
/* */
void ds_init(node **pNode)
{
int item;
node *temp;
node *target;
printf(" , 0
");
while(1)
{
scanf("%d",&item);
fflush(stdin); // ,
if(item==0)
return;
if((*pNode)==NULL)
{/* */
*pNode=(node*)malloc(sizeof(struct CLinkList));
if(!(*pNode))
exit(0); //
(*pNode)->data=item;
(*pNode)->next=*pNode;
}
else
{
/* next */
for(target=(*pNode);target->next!=(*pNode);target=target->next)
; // ,
/* */
temp=(node *)malloc(sizeof(struct CLinkList)); //
if(!temp) //
exit(0);
temp->data=item; // temp
temp->next=*pNode; //
target->next=temp; //
}
}
}
/* */
/* : , */
void ds_insert(node **pNode, int i) //i
{
node *temp; //
node *target;
node *p;
int item;
int j=1;
printf(" :"); //
scanf("%d",&item);
if(i==1)
{
//
temp=(node*)malloc(sizeof(struct CLinkList));//
if(!temp) //
exit(0);
temp->data=item; // temp
/* */
for(target=(*pNode);target->next!=(*pNode);target=target->next)
;
temp->next=(*pNode); // temp
target->next=temp; // temp, temp
*pNode=temp; // , temp
}
else
{
target=*pNode; // target
for(;jnext;
}
temp=(node *)malloc(sizeof(struct CLinkList));
if(!temp)
exit(0);
temp->data=item; // temp
p=target->next; // p
target->next=temp; // temp
temp->next=p; // p, temp
}
}
/* */
void ds_delete(node **pNode,int i) //i
{
node *target;
node *temp;
int j=1;
if(i==1)
{
//
/* */
for(target=*pNode;target->next!=*pNode;target=target->next)
;
temp=*pNode; // , temp
*pNode=(*pNode)->next; // ,
target->next=*pNode; //
free(temp); // ,
}
else
{
target=*pNode; //target
for(;jnext;
temp=target->next; //temp
target->next=temp->next; // target ,
free(temp); // temp,
}
}
/* */
int ds_search(node *pNode,int elem) //elem
{
node *target;
int i=1;
for(target=pNode;target->data!=elem&&target->next!=pNode;++i)
target=target->next; // target , , elem , ,i
if(target->next==pNode) // , 0, , i
return 0;
else
return i;
}
/* */
void ds_traverse(node *pNode)
{
node *temp;
temp=pNode; //temp
printf("********** ********");
do
{
printf("%4d",temp->data); //
} while((temp=temp->next)!=pNode); // temp
printf("
");
}
int main()
{
node *pHead=NULL;
char opp;
int find;
printf("1.
2.
3.
4.
5.
0.
");
while(opp!='0')
{
scanf("%c",&opp);
switch(opp)
{
case'1':
ds_init(&pHead);
printf("
");
ds_traverse(pHead);
break;
case'2':
printf(" :");
scanf("%d",&find);
ds_insert(&pHead,find);
printf(" %d :
",find);
ds_traverse(pHead);
printf("
");
break;
case'3':
printf(" :");
scanf("%d",&find);
ds_delete(&pHead,find);
printf(" %d :",find);
ds_traverse(pHead);
printf("
");
break;
case'4':
printf(" :");
scanf("%d",&find);
printf(" %d :%d
",find,ds_search(pHead,find));
printf("
");
break;
case'5':
ds_traverse(pHead);
printf("
");
break;
case'0':
exit(0);
}
}
return 0;
}
초보 자가 방금 입문 한 데이터 구 조 는 오전 에 알 고 인식 하 며 순환 링크 를 이해 했다. 알 겠 지만 어 쩔 수 없 이 작은 편집 지능 이 유한 하고 시간 이 많이 걸 렸 다. 그러나 시간 은 마음 에 드 는 사람 을 저 버 리 지 않 고 데이터 구조 대문 에서 약간의 문틈 을 짜 냈 다. 독특한 사례 를 보 았 다. 링크 의 초기 화, 삽입, 삭제, 조회, 옮 겨 다 니 는 것 을 보 았 다.많은 이익 을 얻 었 다 고 생각 합 니 다. 여러분 과 공유 하고 싶 습 니 다. 모든 이 해 를 주석 에 넣 었 습 니 다. 여러분 은 코드 를 보면 서 이해 할 수 있 습 니 다.