C语言学习笔记
1.链表实现:
该链表属于通用型链表实现,可以在链表最后一个元素后添加新的元素,链表初始化函数新增一个没有数据段的链表head,该head就是一个链表的起始,后面添加或者删除或者打印数据都是基于此head来的。
如下函数就是初始化链表函数,返回值提供一个head地址。
struct student *InitTab(struct student_Data *studata)
如下函数为向链表添加数据,参数一为链表head地址,参数二为数据段地址。
int TabAdd(struct student *head,struct student_Data *studata)
如下函数为链表删除函数,参数一为head地址,参数二为需要删除的第几个数据,head为第一个元素以此类推。
void TabDel(struct student *head,int n)
如下函数为链表数据打印函数,参数为链表的head地址。
void printTab(struct student *head)
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stddef.h>
struct student_Data{
int student_ID;
char student_Name[10];
int student_Age;
};
struct student{
struct student_Data *studata;
struct student *Next;
};
struct student *InitTab(struct student_Data *studata){
struct student *head;
head = (struct student *)malloc(sizeof(struct student));
head->studata = studata;
head->Next = NULL;
return head;
}
int TabAdd(struct student *head,struct student_Data *studata){
struct student *p=head;
struct student *pNode;
pNode = (struct student *)malloc(sizeof(struct student));
while(p->Next != NULL){
p = p->Next;
}
p->Next = pNode;
pNode->Next = NULL;
pNode->studata = studata;
return 1;
}
void printTab(struct student *head){
struct student *ptr = head->Next;
struct student_Data *stu;
while(ptr != NULL){
stu = ptr->studata;
printf("%d%s%d\n",stu->student_ID,stu->student_Name,stu->student_Age);
ptr=ptr->Next;
}
}
void TabDel(struct student *head,int n)
{
printf("enter TabDel\n");
struct student *ptr= head,*Delptr;
struct student_Data *Delstu;
int count = 0;
while(ptr != NULL){
if(ptr->Next != NULL)
{
printf("point ok\n");
count++;
if(count == n-1)
{
printf("count:%d\n",count);
Delptr= ptr->Next;
ptr->Next=Delptr->Next;
Delstu = Delptr->studata;
free(Delstu);
free(Delptr);
}
}
ptr = ptr->Next;
}
}
void main(){
struct student_Data *p1,*p2;
struct student *head;
head = InitTab(NULL);
p1 = (struct student_Data *)malloc(sizeof(struct student_Data));
p2 = (struct student_Data *)malloc(sizeof(struct student_Data));
p1->student_ID = 1;
strcpy(p1->student_Name,"bob");
p1->student_Age = 20;
p2->student_ID = 2;
strcpy(p2->student_Name,"sum");
p2->student_Age = 10;
TabAdd(head,p1);
TabAdd(head,p2);
TabDel(head,2);
printTab(head);
}