1. 程式人生 > >建立一個鏈式線性表

建立一個鏈式線性表

建立一個鏈式線性表,並實現排序和插入資料

在敲這個程式碼時一直很糾結,邏輯上毫無錯誤,最後才發現是指標沒學好。

在對尾部元素進行置空時,若想少定義指標去建立連結串列就必須要在迴圈中增加判斷,否則當執行完h->next=h後再將h指向空並不代表h->next也指向空。

貌似蘊涵著一個哲學意義:此時的你並非彼時的你

#include <iostream>
#include<cstdlib>
using namespace std;
typedef struct v{
	int e;
	struct v *next;
	int length;
}v; v* initsq(){ struct v *sq; sq=(struct v*)(malloc(sizeof(struct v))); sq->next=NULL; sq->length=0; } void insertsq(v *sq,int data){ v *p=(v*)(malloc(sizeof(v))); p->e=data; v *q=sq->next; if(data<=q->e){ q->next=sq->next; sq->next=q; } else{ int temp=q->
next->e;//data必定>sq->next->e因此從p->next->e開始 while(data>temp&&q->next!=NULL){ q=q->next; if(q->next) temp=q->next->e; } p->next=q->next; q->next=p; } sq->length++; } void sort(v* sq){ v* p=sq->next; v* q; while(p!=NULL){
q=p->next; while(q!=NULL){ if(q->e<p->e){ int temp=p->e; p->e=q->e; q->e=temp; } q=q->next; } p=p->next; } } void change(int *p,int *q){ int temp=*p; *p=*q; *q=temp; } void printsq(v *sq){ v* h=sq->next; while(h!=NULL){ printf("%d ",h->e); h=h->next; } printf("\n"); } int main(int argc, char** argv) { struct v *sq; sq=initsq(); struct v *h=(v*)(malloc(sizeof(v))); sq->next=h; printf("input N:"); int n; scanf("%d",&n); while(n--){ scanf("%d",&h->e); if(n==0) break; h->next=(v*)(malloc(sizeof(v))); h=h->next; } h->next=NULL; printsq(sq); sort(sq); printsq(sq); printf("insert number:"); int data; scanf("%d",&data); insertsq(sq,data); printsq(sq); printf("\nlength=%d",&sq->length); return 0; }