C语言学习笔记

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);	
} 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值