1. 程式人生 > >單鏈表插入(完整版程式 在表頭和表尾插入演算法)

單鏈表插入(完整版程式 在表頭和表尾插入演算法)

#include<stdio.h>
#include<stdlib.h>
#include<malloc.h>
#include<string.h>
#define N 3
typedef struct node
{
    char name[20];
    struct node *next;
}ListNode;

ListNode *creat(int n)
{
    ListNode *p,*h,*s;
    int i;
    if((h=(ListNode*)malloc(sizeof(ListNode)))==NULL)
    {
        printf
("不能分配記憶體空間!"); exit(0); } h->name[0] = '\0'; h->next=NULL; p = h; for(i = 0;i<n;i++) { if((s=(ListNode*)malloc(sizeof(ListNode)))==NULL) { printf("不能分配記憶體空間!"); exit(0); } p->next = s; printf("請輸入第%d個人的名字",i+1); scanf("%s",s->name); s
->next = NULL; p = s; } return(h); } void printList(ListNode *p) { while(p->next) { p = p->next; printf("%s\n",p->name); } } void reverse(ListNode *p) { ListNode *a,*b,*c; a = p; b = p->next; while(b->next!=NULL) { c=b->next; b->next
= a; a = b; b=c; } b->next = a; p->next->next = NULL; p->next=b; } void find(ListNode* head,char *t) { ListNode *p,*s; p =head; while((p->next)&&(strcmp(p->next->name,t))) p = p->next; if(p->next) { printf("找到了!哦耶\n"); } else { printf("沒找到,大哭!\n"); } } void Insert(ListNode* head) { char t[10]; ListNode *p,*s; int i,j; printf("請輸入要插入的字串:"); scanf("%s",&t); p = head; j = 0; while(p->next&&strcmp(t,p->next->name)>0) { j++; p = p->next; } if(!strcmp(t,p->next->name)) printf("重複插入,不允許。\n"); else { s = (ListNode*)malloc(sizeof(ListNode)); strcpy(s->name,t); s->next = p->next; p->next = s; } } void InsertAtTail(ListNode *pHead) { ListNode *pNew; if((pNew=(ListNode*)malloc(sizeof(ListNode)))==NULL) { printf("不能分配記憶體空間!"); exit(0); } //pNew->name = value; printf("請輸入要插入的字串:"); scanf("%s",pNew->name); while(pHead->next) { pHead = pHead->next; } pHead->next = pNew; pNew->next = NULL; } void InsertAtHead(ListNode *pHead) { ListNode *pNew; if((pNew=(ListNode*)malloc(sizeof(ListNode)))==NULL) { printf("不能分配記憶體空間!"); exit(0); } //pNew->name = value; printf("請輸入要插入的字串:"); scanf("%s",pNew->name); pNew->next = pHead->next; pHead->next = pNew; } void main() { int number; ListNode *head; char t1[80]; char *t2; number = N; head = creat(number); printf("建立好的連結串列為:\n"); printList(head); //reverse(head); //printf("單鏈表逆置之後:\n"); //printList(head); //printf("輸入要查詢的字串\n"); // gets(t1); //scanf("%s",&t1); //find(head,t1); //Insert(head); //printList(head); InsertAtTail(head); printList(head); InsertAtHead(head); printList(head); }

這個程式是考慮存在頭結點的情況下。