• c语言数据结构---动态链表操作


    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    //#define LEN sizeof(LinkedList);
    
    typedef struct Student{
    	int score;
    	char name[10];
    	struct Student *next;
    }LinkedList;
    /**
    *链表的创建,n为创建的节点的个数
    **/
    LinkedList * create(int n){
    	LinkedList *head,*node,*end;
    	head = (LinkedList*)malloc(sizeof(LinkedList));
    	end = head;
    	char name[10];
    	for(int i=0;i<n;i++){
    		node = (LinkedList*)malloc(sizeof(LinkedList));
    		printf("enter student%d's name:
    ",i+1);
    		scanf("%s",name);
    		strcpy(node->name,name);
    		printf("enter student%d's score:
    ",i+1);
    		scanf("%d",&node->score);
    		end->next = node;
    		end = node;
    	}
    	end->next=NULL;
    	return head;
    }
    /**
    *链表数据插入,index为第index个节点,node为要插入的节点,old为指向原链表的指针
    **/
    void insert(LinkedList *old,LinkedList *node,int index){
    	LinkedList *temp=old;
    	int n=0;
    	while(n<index&&temp->next!=NULL){
    		temp = temp->next;
    		n++;
    	}
    	if(temp != NULL){
    		node->next = temp->next;
    		temp->next = node;
    	}
    	else
    		puts("index outof range");
    
    }
    /*
    *链表元素的追加
    */
    void append(LinkedList *list,LinkedList *append){
    	LinkedList *p;
    	p = list;
    	while(p->next!=NULL){
    		p = p->next;
    	}
    	p->next = append;
    	p = append;
    }
    /**
    *链表的打印展示
    **/
    void displaylist(LinkedList *link){
    	while(link->next!=NULL){
    		link = link->next;
    		printf("name:%s	score:%d
    ",link->name,link->score);
    	}
    }
    /**
    *链表的删除
    **/
    void dellist(LinkedList *link,int index){
    	LinkedList *t;
    	int temp = 0;
    	while(temp<index&&link->next!=NULL){
    		t = link;
    		temp ++;
    		link = link->next;
    	}
    	if(link != NULL){
    		t->next = link->next;
    		free(link);
    	}else{
    		puts("index outof range");
    	}
    }
    /**
    *链表的更改
    **/
    void updatelist(LinkedList *link,LinkedList *node,int index){
    	LinkedList *t=link,*t1;
    	int temp = 0;
    	while(temp<index&&t->next!=NULL){
    		t1 = t;
    		temp ++;
    		t = t->next;
    	}
    	if(t != NULL){
    		node->next=t->next;
    		t1->next = node;
    		free(t);
    	}else{
    		puts("index outof range");
    	}
    }
    /**
    *链表获取指定节点
    *head为指向链表表头的指针
    *index为要获取的第几个节点
    **/
    LinkedList getnode(LinkedList *head,int index){
    	int i=0;
    	LinkedList *p,node;
    	p=head;
    	while(i<index&&p!=NULL){
    		i++;
    		p=p->next;
    	}
    	node = *p;
    	return node;
    }
    /**
    *链表数据域的打印
    **/
    void display(LinkedList node){
    	printf("LinkedList:{name:%s,score:%d}
    ",node.name,node.score);
    }
    int main(void){
    	int n;
    	puts("enter node number:");
    	scanf("%d",&n);
    	LinkedList *list = create(n);
    	displaylist(list);
    	puts("after insert a node:");
    	LinkedList temp,*node;
    	temp.score = 88;
    	strcpy(temp.name,"gwb");
    	node = &temp;
    	insert(list,node,1);
    	displaylist(list);
    	puts("after append:");
    	LinkedList *tp = (LinkedList*)malloc(sizeof(LinkedList));
    	tp->score=99;
    	strcpy(tp->name,"小明");
    	append(list,tp);
    	displaylist(list);
    	puts("after change:");
    	LinkedList *tp1 = (LinkedList*)malloc(sizeof(LinkedList));
    	tp1->score=99;
    	strcpy(tp1->name,"小芳");
    	updatelist(list,tp1,3);
    	displaylist(list);
    	puts("after delete:");
    	dellist(list,2);
    	displaylist(list);
    	LinkedList nodes = getnode(list,2);
    	display(nodes);
    	return 0;
    }
    

      

  • 相关阅读:
    c#设计模式(1)——单例模式
    Javascript变量
    悲观锁和乐观锁
    NestJs 环境 配置
    分布式查询
    Git hub 忽略 文件 、文件夹
    ES6 基础 二
    ES6 基础 一
    invalid credential, access_token is invalid or not latest hint(微信 上传图片返回 error)
    nodejs 入门一(环境及插件)
  • 原文地址:https://www.cnblogs.com/g177w/p/12312063.html
Copyright © 2020-2023  润新知