單鏈表的一些操作
阿新 • • 發佈:2018-11-01
#include <stdio.h> #include <stdlib.h> typedef int ElemType; typedef struct Node { ElemType data; struct Node *next; }Node,*LinkedList; LinkedList LinkedListInit() { Node *L; L = (Node *)malloc(sizeof(Node)); if(L == NULL) { printf("申請記憶體空間失敗\n"); } L->next = NULL; return L; } LinkedList LinkedListCreat_H() {//前插法 Node *L; L = (Node *)malloc(sizeof(Node)); L->next = NULL; ElemType x; while(scanf("%d",&x) != EOF ){ Node *p; p = (Node *)malloc(sizeof(Node)); p->data = x; p->next = L->next; L->next = p; } return L; } LinkedList LinkedListCreat_E()//後插法 { Node *L,*r; L=(Node *)malloc(sizeof(Node)); L->next=NULL; r=L; ElemType x; while(scanf("%d",&x)!=EOF) { Node *p; p=(Node *)malloc(sizeof(Node)); p->data=x; p->next=NULL; r->next=p; r=p; } return L; } LinkedList LinkedListInsert(LinkedList L,int i,ElemType x) //插入 { Node *pre; pre = L; int tempi = 0; for (tempi = 1; tempi < i; tempi++) { pre = pre->next; } Node *p; p = (Node *)malloc(sizeof(Node)); p->data = x; p->next = pre->next; pre->next = p; return L; } LinkedList LinkedListDelete(LinkedList L,ElemType x)//刪除 { Node *p,*pre; p = L; while(p->data != x) { pre = p; p = p->next; } pre->next = p->next; free(p); return L; } LinkedList LinkedListLook(LinkedList L,ElemType x)//查詢 { int q=0; Node *p,*pre; p=L; while(p->data!=x) { pre=p; p=p->next; q++; } printf("該資料在連結串列中的位置是第%d個!\n",q); } int main() { LinkedList list,start; int a; printf("1.前插法建立單鏈表\n"); printf("2.後插法建立單鏈表\n"); printf("請輸入:"); scanf("%d",&a); if(a==1) { printf("前插法:請輸入單鏈表的資料:"); list = LinkedListCreat_H(); for(start = list->next; start != NULL; start = start->next) { printf("%d ",start->data); } printf("\n"); } else if(a==2) { printf("後插法:請輸入單鏈表的資料:"); list = LinkedListCreat_E(); for(start = list->next; start != NULL; start = start->next) { printf("%d ",start->data); } printf("\n"); } int i; ElemType x; printf("請輸入插入資料的位置:"); scanf("%d",&i); printf("請輸入要插入的值:"); scanf("%d",&x); LinkedListInsert(list,i,x); for(start=list->next;start!=NULL;start=start->next) { printf("%d ",start->data); } printf("\n"); printf("請輸入要刪除的元素的值:"); scanf("%d",&x); LinkedListDelete(list,x); for(start = list->next; start != NULL; start = start->next) { printf("%d ",start->data); } printf("\n"); printf("請輸入要查詢的資料:"); scanf("%d",&x); LinkedListLook(list,x); return 0; }