#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
struct Student
{
char cName[20];
int iNumber;
struct Student *pNext; //指向下一个结点的指针
};
int iCount; //全局变量表示链表长度
struct Student *Create()
{
struct Student *pHead = NULL; //初始化链表头指针为空
struct Student *pEnd,*pNew;
iCount = 0; //初始化链表长度
pEnd = pNew = (struct Student*)malloc(sizeof(struct Student));
printf("please first enter Name,then Number\n");
scanf("%s",pNew->cName);
scanf("%d",&pNew->iNumber);
while(pNew->iNumber != 0)
{
iCount++;
if(iCount == 1)
{
pNew->pNext = pHead; //使得指向为空
pEnd = pNew; //跟踪新加入的节点
pHead = pNew; //头指针指向新结点
}
else
{
pNew->pNext = NULL; //新结点的指针为空
pEnd->pNext = pNew; //原来的尾结点指向新结点
pEnd = pNew; //*pEnd指向新结点
}
pNew = (struct Student*)malloc(sizeof(struct Student)); //再次分配结点内存空间
scanf("%s",pNew->cName);
scanf("%d",&pNew->iNumber);
}
free(pNew); //释放没有用的空间
return pHead;
};
void Print(struct Student *pHead)
{
struct Student *pTemp; //循环所用的临时指针
int index = 1; //表示链表中的结点序号
printf("----the list has %d member:---\n",iCount);
printf("\n");
pTemp = pHead; //指针得到首节点的地址
while(pTemp != NULL)
{
printf("the NO%d member is:\n",index);
printf("the name is: %s\n",pTemp->cName);
printf("the number is: %d\n",pTemp->iNumber);
printf("\n");
pTemp = pTemp->pNext; //移动临时指针到下一结点
index++;
}
}
struct Student *Insert(struct Student *pHead)
{
struct Student *pNew; //指向新分配的空间
printf("-----Insert member at first---\n");
pNew = (struct Student *)malloc(sizeof(struct Student)); //分配内存空间,并返回指向该内存空间的指针
scanf("%s",pNew->cName);
scanf("%d",&pNew->iNumber);
pNew->pNext = pHead; //新结点指针指向原来的首结点
pHead = pNew; //头指针指向新结点
iCount ++; //增加链表结点数量
return pHead;
}
void Delete(struct Student *pHead,int ilndex) //*pHead表示头结点,ilndex表示要删除的节点下标
{
int i;
struct Student *pTemp; //控制循环变量
struct Student *pPre; //临时指针
pTemp = pHead; //表示要删除结点前的节点
pPre = pTemp;
printf("---delet NO%d member----\n",ilndex);
for(i = 1;i < ilndex;i++)
{
pPre = pTemp;
pTemp = pTemp->pNext;
}
pPre->pNext = pTemp->pNext; //连接删除节点两边的节点
free(pTemp); //释放掉要删除的节点的内存空间
iCount--; //减少链表中的元素个数
}
int main()
{
struct Student *pHead;
pHead = Create();
pHead =Insert(pHead);
Delete(pHead,2);
Print(pHead);
return 0;
}
链表练习
最新推荐文章于 2019-11-02 17:28:20 发布