单链表的创建、销毁与K结点处插入新结点

单链表的创建、销毁与K结点处插入新结点

#include <iostream>
#include <string>
#include <iomanip>
using namespace std;

//**单链表定义**
typedef struct LNode{   
    char name[20];
    char sex[10];
    int age;
    struct LNode *next;
}LNode,*LinkList;

//**单链表的初始化**
void InitList(LinkList *list){
    (*list)=(LinkList)malloc(sizeof(LNode));
    (*list)->next=NULL;
}

//**链表K结点处插入新结点**
void ListInsert(LinkList list,char name1[],char sex1[],int age1,int j){
    if(!list)
        return;     
    if(j>((list)->age)){
        cerr<<"插入点不在链表中!"<<endl;
        return;
    }
    LinkList p,s;
    p=list;
    s=(LinkList)malloc(sizeof(LNode));
    s->age=age1;
    strcpy_s(s->name,name1);
    strcpy_s(s->sex,sex1);
    for(int i=1;i<j;++i)
        p=p->next;
    s->next=p->next;
    p->next=s;
}

// **遍历链表**
void Display(LinkList list){
    LinkList p;
    p=list->next;
    cout<<"姓名"<<"\t"<<"性别"<<"\t"<<"年龄"<<endl;
    while(p){
        cout<< (p->name) <<"\t"<< (p->sex)
            <<"\t"<< (p->age) <<endl;
        p=p->next;
    }
}

//**链表的销毁**
void Dispose(LinkList students)
{//使用了头结点
    LinkList temp,prev;
    prev=students->next;
    students->next=NULL;
    while(prev){
        temp=prev->next;//销毁的是空间,指针还在应该置空
        free(prev);
        prev=temp;
    }
}

//**主函数main**
int main(){
    int location;
    LinkList students;
    InitList(&students);
    cout<<"Add the students? (Y/N): ";
    char ch;
    cin>>ch;
    while(ch=='Y'){
        cout<<setw(8)<<"name: ";
        cin>>students->name;
        cout<<setw(8)<<"sex: ";
        cin>>students->sex;
        cout<<setw(8)<<"age: ";
        cin>>students->age;
        cout<<setw(8)<<"location: ";
        cin>>location;
        ListInsert(students,students->name,students->sex,students->age,location);
        cout<<"Continue to add the students? (Y/N): ";
        cin>>ch;
    }

    Display(students);
    //销毁链表所占的资源
    Dispose(students);
    cout<<endl;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值