数据结构之单链表(对单链表的所有操作)

来源:互联网 发布:谷歌 人工智能 编辑:程序博客网 时间:2024/05/16 09:59
#include<stdio.h>#include<malloc.h>typedef struct node{ struct node *next; int num;}Node,*PNode;PNode init_linkList();PNode create_linkList(PNode head);void traversal_linkList(PNode head);int getSize(PNode head);int insert(PNode  head,int pos,int val);int rem(PNode head,int pos);int main(){ PNode head = NULL; printf("%p\n",head); head = init_linkList(); printf("%p\n",head); create_linkList(head); traversal_linkList(head); insert(head,2,999); traversal_linkList(head); rem(head,5); traversal_linkList(head);}//初始化链表PNode init_linkList(){ PNode head = NULL; printf("链表初始化开始!\n"); head = (PNode) malloc(sizeof(Node));//头结点 if(head == NULL) {  printf("内存分配失败,初始化失败!\n"); } head->next = NULL; printf("链表初始化成功!\n"); return head;}//创建链表PNode create_linkList(PNode head){ PNode tail = NULL;//尾指针,始终指向链表的尾节点 PNode p = NULL; int i ; printf("创建列表开始:\n"); tail = head; printf("请输入一个数字:\n"); while(scanf("%d",&i)!=EOF) {  p= (PNode) malloc(sizeof(Node));  p->num=i;  tail->next=p;  tail=p;  tail->next=NULL;  printf("请输入一个数字:\n"); } printf("创建列表结束!\n"); return head;   }//遍历链表void traversal_linkList(PNode head){ PNode p = NULL; p = head; printf("遍历列表开始:\n"); while(p->next!=NULL) {  printf("%d\n",p->next->num);  p=p->next; } printf("遍历列表结束!\n");}//在链表中的指定位置插入一个元素int insert(PNode  head,int pos,int val){ int i,length; PNode p = head; PNode q = NULL;  printf("插入元素开始:\n"); length = getSize(head); if(pos>length+1 || pos<1) {  printf("位置错误!\n");  printf("插入元素失败!\n");  return 0; } for(i = 0; i<pos-1; i++) {  p=p->next; } if(p==NULL) {  printf("位置错误!\n");  printf("插入元素失败!\n");  return 0; } q = (PNode) malloc(sizeof(Node)); q->num=val; q->next = p->next; p->next = q; printf("插入元素成功!\n"); return 1;}//在链表中删除某个位置的元素int rem(PNode  head,int pos){ int i,length; PNode p = head; printf("删除元素开始:\n"); length = getSize(head); if(pos>length || pos<1) {  printf("位置错误!\n");  printf("删除元素失败!\n");  return 0; } for(i = 0; i<pos-1; i++) {  p=p->next; } if(p==NULL) {  printf("位置错误!\n");  printf("删除元素失败!\n");  return 0; } p->next=p->next->next; printf("删除元素成功!\n"); return 1;}//获取链表长度int getSize(PNode head){ PNode p = head; int length=0; printf("获取列表长度:\n"); while(p->next!=NULL) {  length++;  p=p->next; } printf("获取列表长度成功\n"); return length;}


0 0
原创粉丝点击