|
/********************************************************************************
该程序实现链表的结点插入:
程序中的void Deletestu(TYM *head)是用来释放已经生成的链表空间,程序中的
TYM *Insert(TYM *head,int pos,int n)函数是用来插入新的结点并返回整个链表的首地址。
在这程序中,主函数首先默认链表的长度为5*TYM,然后输入五个变量的值并输出。接着是
插入结点通过输入i和n的值来设置插入的位置和长度,最后将整理后的新链表中的信息一
起输出。
*********************************************************************************/
#include <stdio.h>
#include <stdlib.h>
typedef struct stu //定义TYM的结构类型
{
char name[20];
int num;
struct stu *next;
}TYM;
void Deletestu(TYM *head) //释放函数
{
TYM *p; //定义TYM类型的指针
for(p=head;p!=NULL;head = p) //释放整条链的程序空间
{
p=head->next;
free(head);
}
if(p==NULL) //如果释放成功,则输出标志
printf("**** Free success! *****\n");
}
TYM *Insert(TYM *head,int pos,int n) //插入结点指针函数
{
TYM *p,*q,*head_i,*head_ii;
int i;
head_i = p = (TYM *)malloc(sizeof(TYM)); //开辟一个新的空间
printf("************************\n");
printf("Please Input The Information Of Insert:\n");
scanf("%s%d",p->name,&p->num); //对新的空间进行赋值
for(i=0;i<n-1;i++) //开辟N个空间
{
q = (TYM *)malloc(sizeof(TYM)); //开辟一个新的空间
p->next = q; //将新空间的地址给前一个变量的next成员
p = q; //将新空间的地址赋给p
scanf("%s%d",p->name,&p->num); //给新开辟的空间赋值
p->next = NULL; //将新变量的成员next设为不指向任何地址
}
if(pos==1) //如果插入的是第一个地址
{
p->next = head; //将原链表的首地址赋给新链表最后一个变量的next成员
head= head_i; //将新链表的首地址赋给head
}
else
{
head_ii = head;
for(i=1;i<pos-1;i++) head_ii = head_ii->next; //找到插入结点的位置
p->next = head_ii->next; //将要插入结点的位置的变量的next成员的值赋给新链表的最后一个变量的next成员
head_ii->next = head_i; //将新链表的首地址赋给要插入结点的位置的变量的next成员
}
return head; //返回首地址
}
int main()
{
TYM *head,*p,*q; //定义指针变量
int i,n;
head = p = (TYM *)calloc(1,sizeof(TYM)); //开辟新空间
for(i=0;i<4;i++)
{
q = (TYM *)malloc(sizeof(TYM)); //开辟一个新空间
p->next = q; //将新空间的地址赋给前一个变量的next成员
p = q; //将新空间的地坦赋给p
p->next = NULL; //使新变量的next成员不指向任何方向
}
printf("************************\n");
printf("Please Input The Information:\n");
for(p=head;p!=NULL;p = p->next) //将整个链表进行赋值
{
scanf("%s%d",p->name,&p->num); //输入当前变量的值
}
printf("******** Output ********\n");
for(p=head;p!=NULL;p=p->next) //将整个链表进行输出
{
printf("%s\t%d\n",p->name,p->num); //输出当前变量的值
}
printf("************************\n");
printf("Please Input The Insert Position:\n");
printf("Position:\t");
scanf("%d",&i); //输入需要插入的位置
printf("Lenth:\t\t");
scanf("%d",&n); //输入插入链表的长度
head = (TYM*)Insert(head,i,n); //调用插入函数,将返回的值强制转换为(TYM*)类型
printf("****** Output All ******\n");
for(p=head;p!=NULL;p=p->next) //将插入后的链表全部输出
{
printf("%s\t%d\n",p->name,p->num); //输出当前变量的值
}
Deletestu(head); //释放整条链表
return 0;
}

*********************************************调试窗口*******************************************
|
|