C++链表(我写的程序自己也看不懂)

建立一个10结点的单向链表,每个结点包括学号,姓名,性别,年龄,对其进行排序,采用插入排序法,按学号从小到大排序。
(我链表没听懂,基础概念讲讲也好~)

以下是创建链表的代码,c语言结构体实现:(不带头结点,一级指针实现,当然可以多级指针实现,也可以带头结点,也可以是循环链表,也可以是
双向循环链表)
#include
#include
//链表结构体定义
typedef struct _NODE
{
int data;
struct _NODE *next;
}Node, *List;

//创建链表
List CreateList()
{
Node head = NULL, *p1 = NULL, *p2 = NULL;
p1 = p2 = (Node
)malloc(sizeof(Node));

            while(1 == scanf("%d", &p1->data))
            {
                            if(NULL == head)
                            {
                                        p1->next = NULL;
                                        head  = p1;
                            }
                            else
                            {
                                        p2->next = p1;
                                        p2 = p1;
                            }
                            p1 = (Node*)malloc(sizeof(Node));
            }
            free(p1);
            p1 = NULL;
            p2->next = NULL;
            /*注意这里 若果是 p2->next = p1; 那么就成为了一个单向循环链表*/
            return head;

}

http://blog.csdn.net/ajioy/article/details/8107321

我的程序……少建立链表了,怎么建呢?
网上有些链表的程序里.data什么的是默认的参数(数据成员)吗?

老师讲一遍你都不耐烦听,写一遍给你你更不耐烦看了。

单向链表简单来说就是一个数据结构体,每个节点包括自身的数据和下一个节点的指针。因此,你可以像链子一样遍历得到它。至于插入,很容易理解,就是先记录下原先那个节点指向的后继节点的地址,让它指向新的节点,而新的节点再指向原先那个节点指向的节点的地址。
数据结构书上一般会有图,看下就懂了。如果没图,去图书馆借一本好一点的书。

我好像没建立链表,怎么改?图片图片

问的另一个问题:举个例子,(如图)这里->data是之前定义过的吗?
它所代表的数据是指链表中的某一小段中的除去 头 和next的那些吗?还是特指叫作data的一小段?图片

void Delete(node * &head,char keyWord)
{
   if (head!=NULL)
   {
      node *p;
      node *pGuard=head;
      if (head->data==keyWord)//这里data指的是什么?除去next的所有吗?
      {
         p=head;
        head=head->next;
         delete p;
         cout <<"The deleted node is " <          return;
      }
      else
      {
         while (pGuard->next!=NULL)
         {
            if (pGuard->next->data==keyWord)//这里为什么会有两个→
            {
               p=pGuard->next;
               pGuard->next=p->next;
               delete p;
               cout <<"The deleted node is " <                return;
            }
            pGuard=pGuard->next;
          }
      }
   }
   cout <<"The keyword node is not found or the link list is empty!" <<endl;
}

这段代码是网上找的,整个程序我无法见到,所以有点盲人摸象的意思……
我想知道data是定义类或结构体中已经定义过的成员吗?函数中用到的只是对应的名为data的那部分吗?
还是说data是特定的系统定义的概念似的某一部分?它所对应的是引用的成员中去掉next的剩下的东西吗?
我还想知道data实际实现过程中是怎样变化的?

typedef struct LNode{ // 定义单链表节点类型

ElemType data;

LNode *next; // 指示下一个结点地址的指针
} LNode;

void InitList (LNode *&H) //初始化单链表
{ //构造一个空的线性链表H,即为链表设置一个头结点,
//头结点的data数据域不赋任何值,头结点的指针域next则为空
H=new LNode; //(LNode *)malloc(sizeof(LNode));

if (!H)
exit(0);
H->next=NULL; // 指针域为空
}
void ClearList(LNode *&H) //清除单链表
{
LNode *q=H->next;
while (q!=NULL) {
H->next =q->next;
free(q);
q=H->next;
}
}

int LengthList (LNode *H) //求单链表长度
{
LNode *p=H;int n=0;
while(p->next!=NULL){
n++;
p=p->next; }
return(n);
}

bool EmptyList (LNode *H) //判断单链表是否为空表
{
return(H->next==NULL);
}

ElemType GetList (LNode *H, int pos) //取单链表第 pos 位置上的元素
{
int j=0;
LNode *p=H;
while(j j++;
p=p->next;
}
if(p==NULL) return 0;
else {
return(p->data);
}
}

void TraverseList(LNode *H) //遍历单链表
{
LNode *p=H->next;
while(p!=NULL){
printf("%d",p->data);
p=p->next;
}
printf("\n"); }

bool InsertList ( LNode *&H, ElemType item, int pos) //向单链表插入一个元素
{
int j=0;
LNode *p=H,*s;
while(j j++;
p=p->next; }
if(p==NULL) return 0;
else {
s=(LNode *)malloc(sizeof(LNode));
s->data=item;
s->next=p->next;
p->next=s;
return 1;
}
}

bool DeleteList ( LNode *&H, ElemType &item, int pos) //从单链表中删除一个元素
{
int j=0;
LNode *p=H,*q;
while(j j++;
p=p->next; }
if(p==NULL)
return 0;
else {
q=p->next;
if(q==NULL)
return 0;
item=q->data;

p->next=q->next;
free(q);
return 1;
} }

————————————————————————————————LinkList.h————————————


#include <stdio.h>

#include
#include
typedef int ElemType;
#include "LinkList.h"

int main() {

LNode *h;

ElemType e;

InitList(h); //1

cout<<"请输入要插入元素的个数:";

int length;

cin>>length;
if(length == 0)

cout<<"链表长度为0.";

    else{
    cout<<"输入数据:"; 
for(int i = 0; i < length; i++)  {
        int t;            
        cin>>t;
        InsertList(h,t,i+1); 
} 
TraverseList(h); //6
} 

if(EmptyList(h))  //4
    cout<<"单链表h为空"<<endl;
else
    cout<<"单链表h非空"<<endl;
int m;
m=LengthList(h);
cout<<"单链表h长度= "<<m<<endl;    //3

cout<<"请输入要查找的元素的位置:";//5
int f;  
cin>>f;
if(f>m||f<1){   
    cerr<<"pos is out of range!"<<endl;      
    return 0;  }  
else{
e=GetList(h, f);
cout<<"元素="<<e<<endl;
}
cout<<"请输入要插入元素的位置:";  //7   
int pos;      
cin>>pos;  
if(pos>length){   
    cerr<<"pos is out of range!"<<endl;      
    return 0;  }  

cout<<"请输入要插入的元素:";
int x;  
cin>>x;
InsertList(h, x, pos); 
printf("输出单链表h:");
TraverseList(h);     
cout<<"请输入要删除元素位置:"; //8 
int y;
cin>>y;     
DeleteList(h, e, y);

TraverseList(h); 

ClearList(h);//2
return 0;

}

————————————————————————————————————test2_2.cpp————————

        以前写的。希望对你有帮助。         

补充一下,你是初学者,.data不是什么默认参数,是用户自定义的,你可以定义为你自己喜欢的任意单词。比如说student结构体里面的age(年龄)...

上面手误写错字了,纠正一下:Node *head = NULL,