C++链表操作

来源:互联网 发布:淘宝网真皮短款女靴 编辑:程序博客网 时间:2024/05/16 06:05
#define _CRT_SECURE_NO_DEPRECATE#include<iostream>//#include<malloc.h>#include<stdio.h>using namespace std;struct Node{    int number;    char *a;    /*int grade;*/    Node * next;};Node* insert(Node * &head/*, int num*/);void del(Node * &head, int key);void show(const Node * head);void GreatList(Node * &head);void main(){    int k;    Node * head = NULL;    cout << "初始化链表:" << endl;    GreatList(head);    cout << "插入学生:" << endl;    insert(head/*, k*/);    cout << "输入删掉的学生信息";    cin >> k;    del(head, k);    show(head);}void GreatList(Node * &head){    Node *s, *p = NULL;    s = new Node;    cin >> s->number;    scanf("%s",&s->a);    while (s->number != 0)    {        if (head == NULL)            head = s;        else            p->next = s;//38行        p = s;        s = new Node;        cin >> s->number;        scanf("%s", &s->a);    }    p->next = NULL;    delete s;    return;}Node* insert(Node * &head/*, int num*/){    Node * s, *p, *q,*sn,*pre;    sn = head;//这里需要一个指针指向头结点    pre = head;    s = new Node;    cin >> s->number;    scanf("%s", &s->a);    /*s->number = num;*/    s->next = NULL;    if (head == NULL)    {        head = s;    }    else     {        while (s->number > sn->number&&sn->next!=NULL)        {            pre = sn;            sn = sn->next;        }        if (s->number <= sn->number)        {            if (head == sn)            {                head = s;                s->next = sn;            }            else            {                pre->next = s;                s->next = sn;            }        }        else        {            sn->next = s;        }    }    return head;}void del(Node * &head, int key){    Node * p;    if (!head)    {        cout << "列表为空!\n";        return;    }    if (head->number == key)    {        p = head;        head = head->next;        delete p;        p = NULL;        cout << key << "列表头节点已被删除\n";        return;    }    for (Node * pg = head; pg->next!=NULL; pg = pg->next)    {        if (pg->next->number == key)        {            p = pg->next;            pg->next = p->next;            delete p;            cout << key << "已被删除\n";            return;        }    }    cout << key << "不存在链表中\n";}void show(const Node * head){    cout << "现在的列表为:";    while (head)    {        cout << head->number << endl;        char *arr = head->a;        cout << arr;        head = head->next;    }}