1. 程式人生 > 實用技巧 >連結串列的實現

連結串列的實現

#include <stdio.h>
#include <stdlib.h>


struct Node
{
    int data;
    struct Node *next;
};

typedef struct Node* LinkList;
typedef struct Node *ListNode;
void InitList(LinkList *head);
void HeadInsrt(LinkList *head);
void showList(LinkList head);
void EndInsert(LinkList *head);
void Delete(LinkList *head,int
index); void InsertByPosition(LinkList *head,int index,int data); int main(void) { LinkList head; InitList(&head); //HeadInsrt(&head); EndInsert(&head); showList(head); Delete(&head,1); printf("\n"); showList(head); Delete(&head,4); printf(
"\n"); showList(head); system("pause"); return 0; } void InitList(LinkList *head) { *head=(LinkList)malloc(sizeof(ListNode)); (*head)->next=NULL; } void HeadInsrt(LinkList *head) { int a; printf("請輸入要生成的節點個數:"); scanf("%d",&a); struct Node *p; for
(int i=0;i<a;i++) { int data;scanf("%d",&data); p = (struct Node *)malloc(sizeof(struct Node)); p->data=data; p->next=(*head)->next; (*head)->next=p; } } void EndInsert(LinkList *head) { LinkList tail; tail=*head; int a; struct Node *p; printf("enter entire whole number:"); scanf("%d",&a); for(int i=0;i<a;i++) { int data;scanf("%d",&data); p = (struct Node *)malloc(sizeof(struct Node)); p->next=NULL; p->data = data; tail->next=p; tail=p; } } void showList(LinkList head) { LinkList p=head->next; while(p) { printf("%d ",p->data); p=p->next; } } void InsertByPosition(LinkList *head,int index,int data) { int i=0; LinkList p=*head; while(p && i<index-1) { p=p->next; i++; } if(!p || index<i) { printf("插入位置不合法\n"); } ListNode q; q=(ListNode)malloc(sizeof(struct Node)); q->data = data; q->next=p->next; p->next=q; } void Delete(LinkList *head,int index) { LinkList p=*head; int i=0; while(p && i<index-1) { p=p->next; i++; } if(!p || i>index) { printf("刪除位置不合理"); } if(p->next==NULL)//第i-1個節點之後已無其他節點 { printf("第%d個節點不存在\n",index); } LinkList q=p->next; p->next=q->next; free(q); }