链表(C语言)
#include <stdio.h>
#include <stdlib.h>#define number 5typedef int elemType;typedef struct List
{elemType elem;struct List *next;
}Node;//創建單鏈表
struct List *createList(int num)
{Node *head,*p1,*p2;if((head=(Node*)malloc(sizeof(Node)))==NULL){printf("create error\r\n");exit(0);}head->elem=0;head->next=NULL;p1=head;int i;for(i=0;i<num;i++){if((p2=(Node*)malloc(sizeof(Node)))==NULL){printf("create error\r\n");exit(0);}p2->elem=i;p2->next=NULL;p1->next=p2;p1=p2;}return head;
}//遍歷單鏈表
void displayList(Node *head)
{Node *p1;if(head==NULL){printf("空鏈表\r\n");//exit(0);}else{for(p1=head->next;p1!=NULL;p1=p1->next){printf("%d\t",p1->elem);}printf("\r\n");}
}//插入節點 pos從1開始
void insertList(Node* head,elemType elem,int pos)
{Node *p1,*p2;int i=1;p1=head;while(p1->next!=NULL){if(i>=pos)//pos=1break;p1=p1->next;i++;}if((p2=(Node*)malloc(sizeof(Node)))==NULL){printf("insert create rear error");exit(0);}if(p1->next!=NULL)//表中插入{p2->elem=elem;p2->next=p1->next;p1->next=p2;}else//在鏈表尾插入{p2->elem=elem;p2->next=NULL;p1->next=p2;}
}//刪除結點 pos從1開始 返回結點的值
elemType moveList(Node* head,int pos)
{elemType temp;Node *p1,*p2;int i=1;p1=head;while(p1->next!=NULL){if(i>=pos){break;}i++;p1=p1->next;}p2=p1->next;if(p2->next==NULL)p1->next=NULL;elsep1->next=p2->next;return p2->elem;
}//查找元素 返回元素位置 找不到返回-1
int searchList(Node* head,elemType elem)
{Node* p1;p1=head;int i=1;while(p1->next!=NULL){if(p1->next->elem==elem){return i;}i++;p1=p1->next;}printf("找不到該元素\r\n");return -1;
}//判斷鏈表是否為空
bool isEmptyList(Node* head)
{return head==NULL;//||head->next==NULL;
}//清除鏈表的所有節點,包含頭節點
struct List* clearList(Node* head)
{Node *p1,*p2;p1=head;//int i=1;while(p1!=NULL){p2=p1->next;free(p1);p1=NULL;p1=p2;//printf("%d\t",i++);}head=NULL;//將所指的鏈表指針設為NULLreturn head;
}int main()
{Node *head;elemType temp;head=createList(number);displayList(head);insertList(head,8,3);displayList(head);insertList(head,9,7);displayList(head);temp=moveList(head,3);displayList(head);printf("移除:%d\r\n",temp);temp=moveList(head,6);displayList(head);printf("移除:%d\r\n",temp);temp=searchList(head,3);if(temp!=-1)printf("位置:%d\r\n",temp);temp=searchList(head,7);if(temp!=-1)printf("位置:%d\r\n",temp);if(!isEmptyList(head))printf("not empty\r\n");head=clearList(head);displayList(head);if(isEmptyList(head))printf("empty\r\n");return 0;
}
總結