链表的主函数怎么写

1.请问这个链表主函数怎么写哥们你这是数据结构上的吧 。
学数据结构要灵活 。
【链表的主函数怎么写】 这里给你一个建立链表的程序:(以SDUTOJ 2116题为例题) #include using namespace std; class List { public: int data;//数据域,用来记录数据 List *next;//指着域,用来记录它下一个节点的地址 //访问这个变量能找到它的下一个节点 }; void del(List *p)//递归释放内存 { if(p == NULL)//p为NULL说明p访问到链表结尾了 return ;//访问到结尾返回 del(p->next);//如果没访问到结尾,会在这里一直调用函数本身递归,直到遇见NULL delete p;//遇到NULL返回到head的时候,从后向前删除节点,释放内存 //如果从前面删除的话就会把本节点的next值也给删除了,就没办法访问到下一个节点了 //如果定义一个临时变量先记录下一个节点地址然后再删除本节点也是可以解决这个问题的 } //void del(List *head) //{ // List *p = head,*q; // while(p) // { // q = p; // p = p->next; // delete q; // } //}//这样释放内存也是可以的 int main() { List *head = new List;//new开辟内存,地址赋给head,head代表这个 //链表的头,访问head能找到这个链表 head->next = NULL;//初始状态下只有head链节,他没有后继结点,所以他的next值为NULL(空) List *p,*q;//p是游动指针,建立链表的时候永远指向最后一个链节 //q是开新内存用的,也就是增加一个新的链节 int n;//输入数的个数 cin>>n; p = head;//初始状态下只有head一个链节,那么最后一个链节也是head,让p指向head for(int i = 0;i < n;i++) { q = new List;//增加新的链节q cin>>q->data;//给新链节的data赋值 p->next = q;//把q挂在p(初始值是head)的后面 q->next = NULL;//新链节是链表的最后一个链节,后面没有后继,那么,就把他的next值设为NULL(空) p = q;//q成为p的后继之后,q就是最后一个节点,我们规定p指向最后一个节点,这里就把q赋给p }//循环完成后,链表就建立完了,head是他们的头 p = head->next;//p在上面是指向最后一个元素,以便于增加新的链节后能很快的放在它的后面,达到添加链节的目的 //现在我们就发动他的游动特点,来访问整个链表,从上面看来,我们输入的第一个整数放在q->data //里面了,并没有放在head里面,那么,我们访问的话,head的下一个节点才是第一个存储节点,用p //访问head的next,判就指向了链表中的第一个存储输入数的节点(真正第一个节点是head,因为head //因为head的data没有值,所以,我们说head的后面第一个节点为有效节点) while(p != NULL)//当p访问不到NULL的时候,就会一直循环,NULL是链表结束的标志 { coutnext != NULL) cout<<" ";//这两行是调格式的,为了能在最后不多输出空格,其实只是为了在OJ上AC p = p->next;//p访问把本节点的next值,p就指向下一个节点,相当于向后移动一个节点 } cout<2.链表的各函数在主函数中怎么联系起来,就是写的子函数在主函数中要typedef struct test { int a; struct test *next; }Test; typedef struct test1 { int a; struct test1 *next; struct test1 *front; }Test1;//单链表创建 Test *Create() { Test *head,*p1,*p2; head = p1 = p2 = NULL; p1 = (Test*)malloc(sizeof(Test)); scanf("%d",&p1->a); while(p1->a != 0) { if(head == NULL) { head = p1; } else { p2->next = p1; } p2 = p1; p1 = (Test*)malloc(sizeof(Test)); scanf("%d",&p1->a); } p2->next = NULL; return head; }//创建双向链表 Test1 *Create2() { Test1 *head,*p1,*p2; head = p1 = p2 = NULL; p1 = (Test1*)malloc(sizeof(Test1)); scanf("%d",&p1->a); p1->front = NULL; p1->next = NULL; while(p1->a != 0) { if(head == NULL) { head = p1; } else { p2->next = p1; p1->front = p2; } p2 = p1; p1 = (Test1*)malloc(sizeof(Test1)); scanf("%d",&p1->a); p1->front = NULL; p1->next = NULL; } p2->next = NULL; return head; }//只遍历一次单链表,找出中间元素 void SearchCenter(Test *head) { Test *p1,*p2; p1 = p2 = head; while(p2->next != NULL) { p2 = p2->next; if(p2->next != NULL) p2 = p2->next; p1 = p1->next; } printf("链表中间结点为:%d\n",p1->a); }//双向链表输出 void output1(Test1* head) { Test1 *p1,*p2; p1 = head; while(p1!= NULL) { printf("%d,",p1->a); p2 = p1; //p2用来保存最后一个结点 p1 = p1->next; } //从最后一个结点往前输出 while(p2 != NULL) { printf("%d,",p2->a); p2 = p2->front; } printf("\n"); } void output(Test* head) { Test *p1; p1 = head; while(p1 != NULL) { printf("%d,",p1->a); p1 = p1->next; } printf("\n"); }//单链表翻转//Next用来保存原链表中p结点的下一个结点 Test *reverse1(Test *head) { Test *p,*back,*Next; if(head == NULL || head->next == NULL) return head; back = head; p = back->next; back->next = NULL; while(p->next != NULL) { Next = p->next; p->next = back; back = p; p = Next; } p->next = back; head = p; return head; } void main() { Test *head = NULL; Test1 *head1 = NULL; head1 = Create2(); output1(head1); head = Create(); printf("初始链表为:\n"); output(head); SearchCenter(head); head = reverse1(head); output(head); } 可以参考这个的方法写 。