欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136
標題:
C語言在鏈表中刪除結(jié)點
[打印本頁]
作者:
hutians
時間:
2015-2-10 17:38
標題:
C語言在鏈表中刪除結(jié)點
/****************************************************************
該程序?qū)崿F(xiàn)結(jié)點的刪除。
其中void *del_node(TYM *head,int pos,int len)函數(shù)用于刪除結(jié)
點,head為需要刪除結(jié)點的鏈表、pos為結(jié)點的位置、len為需要刪除
的長度。
****************************************************************/
#include <stdio.h>
#include <stdlib.h>
typedef struct stu //定義TYM類型
{
char name[20];
int num;
struct stu *next;
}TYM;
void *del_node(TYM *head,int pos,int len) //刪除結(jié)點指針函數(shù)
{
int i;
TYM *p,*q;
if(pos==1) //如果刪除的位置是首地址
{
for(i=0;i<len;i++) //刪除len個結(jié)點
{
p = head; //使p指向head
head = head->next; //使head指向下一個結(jié)點
free(p); //釋放p指向的結(jié)點
}
}
else
{
for(p=head,i=1;i<pos-1;i++) //當pos不是首地址時,找到pos的位置
{
p = p->next; //使p指向下一個結(jié)點,直到第pos個結(jié)點為止
}
for(i=0;i<len;i++) //刪除len個結(jié)點
{
q = p->next; //使q指向p的下一個結(jié)點
p->next = q->next; //將q的下一個結(jié)點的地址傳給p的next
free(q); //釋放q指向的結(jié)點
}
}
return head; //返回首地址
}
void freeall(TYM *head) //釋放函數(shù)
{
TYM *p;
for(p=head;p!=NULL;) //釋放結(jié)點直到所有結(jié)點被釋放
{
p = head->next; //使p指向下一個結(jié)點
free(head); //釋放當前結(jié)點
head = p; //使head指向下一個結(jié)點
}
if(p==NULL) //如果全部釋放
printf("********* Free Success! *********\n");
}
int main()
{
TYM *head,*p,*q;
int i,pos;
head = p = (TYM *)malloc(sizeof(TYM)); //開辟一個新的空間
printf("*********************************\n");
printf("Please Input :\n");
scanf("%s%d",head->name,&head->num); //對新空間賦值
for(i=0;i<4;i++) //創(chuàng)建4個空間
{
q = (TYM*)calloc(1,sizeof(TYM)); //將開辟的空間的首地址賦給q
p->next = q; //將q的值傳遞給p的next成員
p = q; //使p指向q
scanf("%s%d",p->name,&p->num); //對新空間賦值
p->next = NULL; //使空間的next成員不指向任何方向
}
printf("************ Output *************\n");
for(p=head;p!=NULL;p=p->next) //輸出鏈表
{
printf("%s\t%d\n",p->name,p->num); //輸出當前變量的值
}
printf("DELETE......\n");
printf("******** Position & Lenth *******\n");
printf("Position:\t");
scanf("%d",&pos); //輸入刪除結(jié)點的地址
printf("Lenth:\t\t");
scanf("%d",&i); //輸入刪除結(jié)點的個數(shù)
head = del_node(head,pos,i);
printf("********** Output all ***********\n");
for(p=head;p!=NULL;p=p->next) //輸出經(jīng)刪除后的鏈表
{
printf("%s\t%d\n",p->name,p->num); //輸出當前變量的值
}
freeall(head); //釋放鏈表
return 0;
}
****************************************調(diào)試窗口****************************************
歡迎光臨 (http://www.raoushi.com/bbs/)
Powered by Discuz! X3.1