线性表中链表的实现
#include<stdio.h> #include<stdlib.h> #define maxn 110000 typedef struct Node* LNode; struct Node { LNode next; int data; }; //初始化//带有头节点的链表 LNode Creat() { LNode head; head=(LNode)malloc(sizeof(struct Node)); head->next=NULL; return head; } //在第i个位置插入k //因为本身就是一个指针,所以不用取地址 void charu(LNode List,int i,int k) { int pos; if(i<1) { printf("插入的位置不合法\n"); return ; } LNode p=List; //新建一个Node存放待插入元素 LNode t=(LNode)malloc(sizeof(struct Node)); t->data=k; int m=1; while(p!=NULL&&m<i) { p=p->next; m++; } if(p==NULL) { printf("插入的位置不合法\n"); return ; } t->next=p->next; p->next=t; } //输出List所有值 void print(LNode List) { LNode h=List; while(h->next!=NULL) { printf("%d ",h->next->data); h=h->next; } printf("\n"); } //删除位置为k-1的值 void shanchu(LNode List,int k) { LNode head=List; int pos; if(k<1) { printf("删除的位置不合法\n"); return ; } int t=1; while(head->next!=NULL&&t<k) { t++; head=head->next; } if(head->next==NULL) { printf("删除的位置不合法\n"); return ; } head->next=head->next->next; } //寻找元素为k的位置 int Find(LNode List,int k) { LNode head=List; int t=1; while(head->next!=NULL) { if(head->next->data==k) return t; t++; head=head->next; } return 0; } int main() { LNode List; List=Creat(); int length,del,find,k; scanf("%d",&length); printf("插入:"); for(int i=0;i<length;i++) { scanf("%d",&k); charu(List,i+1,k); } print(List); printf("删除:"); scanf("%d",&del); shanchu(List,del); print(List); printf("查找:"); scanf("%d",&find); if(Find(List,find)) printf("%d\n",Find(List,find)); else printf("没有找到\n"); return 0; }
别趴下,熬过黑夜就是黎明
浙公网安备 33010602011771号